diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2019-11-19 10:58:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-19 10:58:44 -0500 |
commit | 89dc26755ad2818c10b37a34ed46f5c79dc571c8 (patch) | |
tree | abd075a205c401b3a5406efb37378544e94c9190 | |
parent | 83cba310335678aa8ecac24b58708b3c924b581a (diff) | |
parent | 63f8834b6bc2d6413da606d7df88a304edc3c625 (diff) |
Merge pull request #138 from jiangzhengwenjz/battle
battle (4th take)
48 files changed, 8242 insertions, 18697 deletions
diff --git a/asm/battle_controller_pokedude.s b/asm/battle_controller_pokedude.s deleted file mode 100644 index e685d786d..000000000 --- a/asm/battle_controller_pokedude.s +++ /dev/null @@ -1,7632 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start nullsub_99 -nullsub_99: @ 81560A0 - bx lr - thumb_func_end nullsub_99 - - thumb_func_start SetControllerToPokeDude -SetControllerToPokeDude: @ 81560A4 - ldr r1, _081560C8 @ =gBattlerControllerFuncs - ldr r0, _081560CC @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _081560D0 @ =sub_81560DC - str r1, [r0] - ldr r2, _081560D4 @ =gBattleStruct - ldr r0, [r2] - adds r0, 0x96 - ldr r1, _081560D8 @ =gSpecialVar_0x8004 - ldrh r1, [r1] - strb r1, [r0] - ldr r0, [r2] - adds r0, 0x97 - movs r1, 0 - strb r1, [r0] - bx lr - .align 2, 0 -_081560C8: .4byte gBattlerControllerFuncs -_081560CC: .4byte gActiveBattler -_081560D0: .4byte sub_81560DC -_081560D4: .4byte gBattleStruct -_081560D8: .4byte gSpecialVar_0x8004 - thumb_func_end SetControllerToPokeDude - - thumb_func_start sub_81560DC -sub_81560DC: @ 81560DC - push {r4,r5,lr} - ldr r2, _08156120 @ =gBattleControllerExecFlags - ldr r1, _08156124 @ =gBitTable - ldr r5, _08156128 @ =gActiveBattler - ldrb r3, [r5] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, [r2] - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _08156138 - ldr r4, _0815612C @ =gBattleBufferA - lsls r0, r3, 9 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0x38 - bhi _08156134 - bl sub_8159AB8 - lsls r0, 24 - cmp r0, 0 - bne _08156138 - ldr r1, _08156130 @ =gUnknown_8478F1C - ldrb r0, [r5] - lsls r0, 9 - adds r0, r4 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - b _08156138 - .align 2, 0 -_08156120: .4byte gBattleControllerExecFlags -_08156124: .4byte gBitTable -_08156128: .4byte gActiveBattler -_0815612C: .4byte gBattleBufferA -_08156130: .4byte gUnknown_8478F1C -_08156134: - bl PlayerPartnerBufferExecCompleted -_08156138: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81560DC - - thumb_func_start sub_8156140 -sub_8156140: @ 8156140 - push {lr} - bl sub_8159824 - pop {r0} - bx r0 - thumb_func_end sub_8156140 - - thumb_func_start sub_815614C -sub_815614C: @ 815614C - push {lr} - ldr r2, _08156174 @ =gSprites - ldr r1, _08156178 @ =gBattlerSpriteIds - ldr r0, _0815617C @ =gActiveBattler - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _08156180 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08156170 - bl PlayerPartnerBufferExecCompleted -_08156170: - pop {r0} - bx r0 - .align 2, 0 -_08156174: .4byte gSprites -_08156178: .4byte gBattlerSpriteIds -_0815617C: .4byte gActiveBattler -_08156180: .4byte SpriteCallbackDummy - thumb_func_end sub_815614C - - thumb_func_start sub_8156184 -sub_8156184: @ 8156184 - push {r4-r7,lr} - ldr r2, _081561E0 @ =gSprites - ldr r0, _081561E4 @ =gBattlerSpriteIds - ldr r7, _081561E8 @ =gActiveBattler - ldrb r3, [r7] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - adds r0, r1, 0 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 27 - lsrs r2, r0, 31 - cmp r2, 0x1 - bne _08156230 - movs r4, 0x24 - ldrsh r0, [r1, r4] - cmp r0, 0 - bne _08156230 - ldr r6, _081561EC @ =gBattleSpritesDataPtr - ldr r0, [r6] - ldr r1, [r0, 0x4] - lsls r4, r3, 1 - adds r0, r4, r3 - lsls r0, 2 - adds r1, r0, r1 - ldrb r5, [r1] - movs r0, 0x80 - ands r0, r5 - cmp r0, 0 - bne _081561F8 - ldr r0, _081561F0 @ =gBattlerPartyIndexes - adds r0, r4, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _081561F4 @ =gEnemyParty - adds r1, r0 - adds r0, r3, 0 - bl sub_80F1720 - b _08156230 - .align 2, 0 -_081561E0: .4byte gSprites -_081561E4: .4byte gBattlerSpriteIds -_081561E8: .4byte gActiveBattler -_081561EC: .4byte gBattleSpritesDataPtr -_081561F0: .4byte gBattlerPartyIndexes -_081561F4: .4byte gEnemyParty -_081561F8: - ldrb r0, [r1, 0x1] - ands r2, r0 - cmp r2, 0 - beq _08156230 - movs r0, 0x7F - ands r0, r5 - strb r0, [r1] - ldr r0, [r6] - ldrb r2, [r7] - ldr r0, [r0, 0x4] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r2, [r1, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r4, _08156238 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - bl PlayerPartnerBufferExecCompleted -_08156230: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08156238: .4byte 0x000027f9 - thumb_func_end sub_8156184 - - thumb_func_start sub_815623C -sub_815623C: @ 815623C - push {lr} - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _0815624E - bl PlayerPartnerBufferExecCompleted -_0815624E: - pop {r0} - bx r0 - thumb_func_end sub_815623C - - thumb_func_start sub_8156254 -sub_8156254: @ 8156254 - push {lr} - ldr r0, _08156284 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815627E - ldr r2, _08156288 @ =gMain - ldr r0, _0815628C @ =0x00000439 - adds r3, r2, r0 - ldrb r1, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - ldr r0, _08156290 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r2] - ldr r0, [r2, 0x8] - bl SetMainCallback2 -_0815627E: - pop {r0} - bx r0 - .align 2, 0 -_08156284: .4byte gPaletteFade -_08156288: .4byte gMain -_0815628C: .4byte 0x00000439 -_08156290: .4byte gPreBattleCallback1 - thumb_func_end sub_8156254 - - thumb_func_start sub_8156294 -sub_8156294: @ 8156294 - push {r4,lr} - ldr r0, _081562DC @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r4, _081562E0 @ =gActiveBattler - ldrb r1, [r4] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _081562D4 - ldr r0, _081562E4 @ =c3_0802FDF4 - movs r1, 0xA - bl CreateTask - ldr r2, _081562E8 @ =gBattlerPartyIndexes - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _081562EC @ =gPlayerParty - adds r0, r2 - bl HandleLowHpMusicChange - bl PlayerPartnerBufferExecCompleted -_081562D4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081562DC: .4byte gBattleSpritesDataPtr -_081562E0: .4byte gActiveBattler -_081562E4: .4byte c3_0802FDF4 -_081562E8: .4byte gBattlerPartyIndexes -_081562EC: .4byte gPlayerParty - thumb_func_end sub_8156294 - - thumb_func_start sub_81562F0 -sub_81562F0: @ 81562F0 - push {r4-r6,lr} - ldr r2, _08156388 @ =gSprites - ldr r0, _0815638C @ =gHealthboxSpriteIds - ldr r6, _08156390 @ =gActiveBattler - ldrb r3, [r6] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _08156394 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08156380 - ldr r5, _08156398 @ =gBattleSpritesDataPtr - ldr r0, [r5] - ldr r1, [r0, 0x4] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r2, r0, r1 - ldrb r1, [r2, 0x1] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08156380 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - ldr r0, [r5] - ldrb r2, [r6] - ldr r0, [r0, 0x4] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r2, [r1, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r4, _0815639C @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - ldr r0, [r5] - ldrb r2, [r6] - ldr r1, [r0] - lsls r0, r2, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08156374 - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x6 - bl InitAndLaunchSpecialAnimation -_08156374: - ldr r0, _081563A0 @ =gBattlerControllerFuncs - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _081563A4 @ =sub_8156294 - str r0, [r1] -_08156380: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08156388: .4byte gSprites -_0815638C: .4byte gHealthboxSpriteIds -_08156390: .4byte gActiveBattler -_08156394: .4byte SpriteCallbackDummy -_08156398: .4byte gBattleSpritesDataPtr -_0815639C: .4byte 0x000027f9 -_081563A0: .4byte gBattlerControllerFuncs -_081563A4: .4byte sub_8156294 - thumb_func_end sub_81562F0 - - thumb_func_start sub_81563A8 -sub_81563A8: @ 81563A8 - push {r4-r6,lr} - ldr r6, _0815645C @ =gBattleSpritesDataPtr - ldr r0, [r6] - ldr r5, _08156460 @ =gActiveBattler - ldrb r2, [r5] - ldr r1, [r0, 0x4] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x88 - ands r0, r1 - cmp r0, 0 - bne _081563DA - ldr r0, _08156464 @ =gBattlerPartyIndexes - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08156468 @ =gPlayerParty - adds r1, r0 - adds r0, r2, 0 - bl sub_80F1720 -_081563DA: - ldr r4, _0815646C @ =gSprites - ldr r0, _08156470 @ =gUnknown_3004FFC - ldrb r2, [r5] - adds r0, r2, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r3, r0, 2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r3, r0 - ldr r1, [r0] - ldr r0, _08156474 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08156454 - ldr r0, [r6] - ldr r1, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08156454 - adds r0, r3, r4 - bl DestroySprite - ldr r4, _08156478 @ =gHealthboxSpriteIds - ldrb r1, [r5] - adds r0, r1, r4 - ldrb r0, [r0] - ldr r2, _08156464 @ =gBattlerPartyIndexes - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _08156468 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl UpdateHealthboxAttribute - ldrb r0, [r5] - bl sub_804BD94 - ldrb r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl SetHealthboxSpriteVisible - ldrb r0, [r5] - bl CopyBattleSpriteInvisibility - ldr r1, _0815647C @ =gBattlerControllerFuncs - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08156480 @ =sub_81562F0 - str r1, [r0] -_08156454: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815645C: .4byte gBattleSpritesDataPtr -_08156460: .4byte gActiveBattler -_08156464: .4byte gBattlerPartyIndexes -_08156468: .4byte gPlayerParty -_0815646C: .4byte gSprites -_08156470: .4byte gUnknown_3004FFC -_08156474: .4byte SpriteCallbackDummy -_08156478: .4byte gHealthboxSpriteIds -_0815647C: .4byte gBattlerControllerFuncs -_08156480: .4byte sub_81562F0 - thumb_func_end sub_81563A8 - - thumb_func_start sub_8156484 -sub_8156484: @ 8156484 - push {lr} - ldr r0, _08156498 @ =gDoingBattleAnim - ldrb r0, [r0] - cmp r0, 0 - bne _08156492 - bl PlayerPartnerBufferExecCompleted -_08156492: - pop {r0} - bx r0 - .align 2, 0 -_08156498: .4byte gDoingBattleAnim - thumb_func_end sub_8156484 - - thumb_func_start sub_815649C -sub_815649C: @ 815649C - push {r4,lr} - ldr r4, _081564DC @ =gBattleSpritesDataPtr - ldr r1, [r4] - ldr r3, _081564E0 @ =gActiveBattler - ldrb r0, [r3] - ldr r2, [r1, 0x4] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x9] - subs r0, 0x1 - strb r0, [r1, 0x9] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _081564D4 - ldr r0, [r4] - ldrb r1, [r3] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strb r1, [r0, 0x9] - bl PlayerPartnerBufferExecCompleted -_081564D4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081564DC: .4byte gBattleSpritesDataPtr -_081564E0: .4byte gActiveBattler - thumb_func_end sub_815649C - - thumb_func_start sub_81564E4 -sub_81564E4: @ 81564E4 - push {lr} - bl sub_8159998 - pop {r0} - bx r0 - thumb_func_end sub_81564E4 - - thumb_func_start sub_81564F0 -sub_81564F0: @ 81564F0 - push {lr} - ldr r0, _08156524 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08156520 - ldr r1, _08156528 @ =gBattlerControllerFuncs - ldr r2, _0815652C @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08156530 @ =sub_8156538 - str r1, [r0] - ldr r1, _08156534 @ =gUnknown_3004FFC - ldrb r0, [r2] - adds r0, r1 - ldrb r0, [r0] - bl DestroyTask - bl FreeAllWindowBuffers - bl sub_8127968 -_08156520: - pop {r0} - bx r0 - .align 2, 0 -_08156524: .4byte gPaletteFade -_08156528: .4byte gBattlerControllerFuncs -_0815652C: .4byte gActiveBattler -_08156530: .4byte sub_8156538 -_08156534: .4byte gUnknown_3004FFC - thumb_func_end sub_81564F0 - - thumb_func_start sub_8156538 -sub_8156538: @ 8156538 - push {lr} - ldr r0, _08156568 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _0815656C @ =BattleMainCB2 - cmp r1, r0 - bne _0815658E - ldr r0, _08156570 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815658E - ldr r0, _08156574 @ =gUnknown_203B0C0 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08156580 - ldr r0, _08156578 @ =gUnknown_203B0C1 - ldrb r1, [r0] - ldr r2, _0815657C @ =gUnknown_203B0DC - movs r0, 0x1 - bl BtlController_EmitChosenMonReturnValue - b _0815658A - .align 2, 0 -_08156568: .4byte gMain -_0815656C: .4byte BattleMainCB2 -_08156570: .4byte gPaletteFade -_08156574: .4byte gUnknown_203B0C0 -_08156578: .4byte gUnknown_203B0C1 -_0815657C: .4byte gUnknown_203B0DC -_08156580: - movs r0, 0x1 - movs r1, 0x6 - movs r2, 0 - bl BtlController_EmitChosenMonReturnValue -_0815658A: - bl PlayerPartnerBufferExecCompleted -_0815658E: - pop {r0} - bx r0 - thumb_func_end sub_8156538 - - thumb_func_start sub_8156594 -sub_8156594: @ 8156594 - push {lr} - ldr r0, _081565C8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081565E2 - ldr r1, _081565CC @ =gBattlerControllerFuncs - ldr r0, _081565D0 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _081565D4 @ =sub_81565E8 - str r1, [r0] - bl nullsub_44 - bl FreeAllWindowBuffers - ldr r0, _081565D8 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x1 - beq _081565C4 - cmp r0, 0x3 - beq _081565DC -_081565C4: - movs r0, 0x7 - b _081565DE - .align 2, 0 -_081565C8: .4byte gPaletteFade -_081565CC: .4byte gBattlerControllerFuncs -_081565D0: .4byte gActiveBattler -_081565D4: .4byte sub_81565E8 -_081565D8: .4byte gSpecialVar_0x8004 -_081565DC: - movs r0, 0x8 -_081565DE: - bl sub_810B108 -_081565E2: - pop {r0} - bx r0 - thumb_func_end sub_8156594 - - thumb_func_start sub_81565E8 -sub_81565E8: @ 81565E8 - push {lr} - ldr r0, _08156614 @ =gMain - ldr r1, [r0, 0x4] - ldr r0, _08156618 @ =BattleMainCB2 - cmp r1, r0 - bne _0815660E - ldr r0, _0815661C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0815660E - ldr r0, _08156620 @ =gSpecialVar_ItemId - ldrh r1, [r0] - movs r0, 0x1 - bl BtlController_EmitOneReturnValue - bl PlayerPartnerBufferExecCompleted -_0815660E: - pop {r0} - bx r0 - .align 2, 0 -_08156614: .4byte gMain -_08156618: .4byte BattleMainCB2 -_0815661C: .4byte gPaletteFade -_08156620: .4byte gSpecialVar_ItemId - thumb_func_end sub_81565E8 - - thumb_func_start sub_8156624 -sub_8156624: @ 8156624 - push {r4-r7,lr} - ldr r4, _08156788 @ =gBattleSpritesDataPtr - ldr r0, [r4] - ldr r5, _0815678C @ =gActiveBattler - ldrb r2, [r5] - ldr r1, [r0, 0x4] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r7, 0x88 - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _08156658 - ldr r0, _08156790 @ =gBattlerPartyIndexes - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08156794 @ =gPlayerParty - adds r1, r0 - adds r0, r2, 0 - bl sub_80F1720 -_08156658: - ldr r1, [r4] - ldrb r0, [r5] - movs r6, 0x2 - adds r2, r6, 0 - eors r2, r0 - ldr r1, [r1, 0x4] - lsls r3, r2, 1 - adds r0, r3, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _0815668A - ldr r0, _08156790 @ =gBattlerPartyIndexes - adds r0, r3, r0 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08156794 @ =gPlayerParty - adds r1, r0 - adds r0, r2, 0 - bl sub_80F1720 -_0815668A: - ldr r0, [r4] - ldrb r2, [r5] - ldr r3, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - ldrb r1, [r0] - movs r4, 0x8 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _08156780 - adds r1, r6, 0 - eors r1, r2 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r1, [r0] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _08156780 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0815671E - ldr r0, _08156798 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0815671E - ldr r1, _0815679C @ =gUnknown_3004FFC - ldrb r0, [r5] - eors r0, r6 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081567A0 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r4, _081567A4 @ =gHealthboxSpriteIds - ldrb r0, [r5] - adds r1, r6, 0 - eors r1, r0 - adds r0, r1, r4 - ldrb r0, [r0] - ldr r2, _08156790 @ =gBattlerPartyIndexes - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _08156794 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl UpdateHealthboxAttribute - ldrb r0, [r5] - eors r0, r6 - bl sub_804BD94 - ldrb r0, [r5] - eors r0, r6 - adds r0, r4 - ldrb r0, [r0] - bl SetHealthboxSpriteVisible -_0815671E: - ldr r1, _0815679C @ =gUnknown_3004FFC - ldr r4, _0815678C @ =gActiveBattler - ldrb r0, [r4] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081567A0 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r5, _081567A4 @ =gHealthboxSpriteIds - ldrb r1, [r4] - adds r0, r1, r5 - ldrb r0, [r0] - ldr r2, _08156790 @ =gBattlerPartyIndexes - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _08156794 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl UpdateHealthboxAttribute - ldrb r0, [r4] - bl sub_804BD94 - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl SetHealthboxSpriteVisible - ldr r0, _08156788 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r2, [r0, 0x8] - ldrb r1, [r2, 0x9] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x9] - ldr r1, _081567A8 @ =gBattlerControllerFuncs - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _081567AC @ =sub_81567B0 - str r1, [r0] -_08156780: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08156788: .4byte gBattleSpritesDataPtr -_0815678C: .4byte gActiveBattler -_08156790: .4byte gBattlerPartyIndexes -_08156794: .4byte gPlayerParty -_08156798: .4byte gBattleTypeFlags -_0815679C: .4byte gUnknown_3004FFC -_081567A0: .4byte gSprites -_081567A4: .4byte gHealthboxSpriteIds -_081567A8: .4byte gBattlerControllerFuncs -_081567AC: .4byte sub_81567B0 - thumb_func_end sub_8156624 - - thumb_func_start sub_81567B0 -sub_81567B0: @ 81567B0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r4, 0 - ldr r2, _081568B0 @ =gSprites - ldr r0, _081568B4 @ =gHealthboxSpriteIds - ldr r1, _081568B8 @ =gActiveBattler - mov r8, r1 - ldrb r3, [r1] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _081568BC @ =SpriteCallbackDummy - cmp r1, r0 - bne _081567DA - movs r4, 0x1 -_081567DA: - cmp r4, 0 - beq _081568A6 - ldr r7, _081568C0 @ =gBattleSpritesDataPtr - ldr r0, [r7] - ldr r4, [r0, 0x4] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r2, r0, r4 - ldrb r1, [r2, 0x1] - movs r5, 0x1 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _081568A6 - movs r6, 0x2 - adds r1, r6, 0 - eors r1, r3 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x1] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _081568A6 - ldrb r1, [r2] - movs r3, 0x7F - adds r0, r3, 0 - ands r0, r1 - strb r0, [r2] - ldr r0, [r7] - mov r1, r8 - ldrb r2, [r1] - ldr r0, [r0, 0x4] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r2, [r1, 0x1] - movs r4, 0x2 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1, 0x1] - ldr r2, [r7] - mov r1, r8 - ldrb r0, [r1] - adds r1, r6, 0 - eors r1, r0 - ldr r2, [r2, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - ands r3, r1 - strb r3, [r0] - ldr r2, [r7] - mov r1, r8 - ldrb r0, [r1] - adds r1, r6, 0 - eors r1, r0 - ldr r2, [r2, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x1] - ands r4, r1 - strb r4, [r0, 0x1] - ldr r4, _081568C4 @ =0x000027f9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - ldr r0, _081568C8 @ =c3_0802FDF4 - movs r1, 0xA - bl CreateTask - ldr r2, _081568CC @ =gBattlerPartyIndexes - mov r0, r8 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _081568D0 @ =gPlayerParty - adds r0, r2 - bl HandleLowHpMusicChange - ldr r1, _081568D4 @ =gBattlerControllerFuncs - mov r2, r8 - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _081568D8 @ =sub_815649C - str r1, [r0] -_081568A6: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081568B0: .4byte gSprites -_081568B4: .4byte gHealthboxSpriteIds -_081568B8: .4byte gActiveBattler -_081568BC: .4byte SpriteCallbackDummy -_081568C0: .4byte gBattleSpritesDataPtr -_081568C4: .4byte 0x000027f9 -_081568C8: .4byte c3_0802FDF4 -_081568CC: .4byte gBattlerPartyIndexes -_081568D0: .4byte gPlayerParty -_081568D4: .4byte gBattlerControllerFuncs -_081568D8: .4byte sub_815649C - thumb_func_end sub_81567B0 - - thumb_func_start sub_81568DC -sub_81568DC: @ 81568DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r1, _081569DC @ =gTasks - lsls r0, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - mov r8, r0 - ldrb r0, [r0, 0x8] - mov r10, r0 - mov r1, r8 - ldrb r7, [r1, 0xC] - str r7, [sp, 0x8] - ldrh r2, [r1, 0xA] - str r2, [sp, 0xC] - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08156922 - ldr r1, _081569E0 @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r10, r0 - bne _08156922 - b _08156A38 -_08156922: - movs r0, 0x64 - mov r1, r10 - muls r1, r0 - ldr r0, _081569E4 @ =gPlayerParty - adds r6, r1, r0 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - movs r1, 0x19 - bl GetMonData - str r0, [sp, 0x4] - ldr r3, _081569E8 @ =gExperienceTables - adds r4, 0x1 - lsls r4, 2 - ldr r2, _081569EC @ =gBaseStats - lsls r1, r5, 3 - subs r1, r5 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1, 0x13] - movs r1, 0xCA - lsls r1, 1 - muls r1, r2 - adds r4, r1 - adds r4, r3 - ldr r2, [r4] - str r2, [sp] - ldr r3, [sp, 0xC] - lsls r1, r3, 16 - asrs r1, 16 - adds r0, r1 - cmp r0, r2 - bcc _08156A10 - adds r0, r6, 0 - movs r1, 0x19 - mov r2, sp - bl SetMonData - adds r0, r6, 0 - bl CalculateMonStats - ldr r2, [sp] - add r0, sp, 0x4 - ldrh r0, [r0] - subs r2, r0 - ldr r0, [sp, 0xC] - subs r2, r0, r2 - ldr r4, _081569F0 @ =gActiveBattler - ldrb r5, [r4] - strb r7, [r4] - lsls r2, 16 - lsrs r2, 16 - movs r0, 0x1 - movs r1, 0xB - bl BtlController_EmitTwoReturnValues - strb r5, [r4] - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _081569F8 - ldr r2, _081569E0 @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r2 - mov r1, r10 - ldrh r0, [r0] - cmp r1, r0 - beq _081569D6 - movs r0, 0x2 - eors r7, r0 - lsls r0, r7, 1 - adds r0, r2 - ldrh r0, [r0] - cmp r1, r0 - bne _081569F8 -_081569D6: - ldr r0, _081569F4 @ =sub_8156C68 - b _08156A3A - .align 2, 0 -_081569DC: .4byte gTasks -_081569E0: .4byte gBattlerPartyIndexes -_081569E4: .4byte gPlayerParty -_081569E8: .4byte gExperienceTables -_081569EC: .4byte gBaseStats -_081569F0: .4byte gActiveBattler -_081569F4: .4byte sub_8156C68 -_081569F8: - ldr r0, _08156A08 @ =gTasks - mov r2, r9 - lsls r1, r2, 2 - add r1, r9 - lsls r1, 3 - adds r1, r0 - ldr r0, _08156A0C @ =sub_8156D80 - b _08156A3C - .align 2, 0 -_08156A08: .4byte gTasks -_08156A0C: .4byte sub_8156D80 -_08156A10: - str r0, [sp, 0x4] - add r2, sp, 0x4 - adds r0, r6, 0 - movs r1, 0x19 - bl SetMonData - ldr r1, _08156A30 @ =gBattlerControllerFuncs - ldr r3, [sp, 0x8] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, _08156A34 @ =sub_8156EE8 - str r1, [r0] - mov r0, r9 - bl DestroyTask - b _08156A3E - .align 2, 0 -_08156A30: .4byte gBattlerControllerFuncs -_08156A34: .4byte sub_8156EE8 -_08156A38: - ldr r0, _08156A50 @ =sub_8156A54 -_08156A3A: - mov r1, r8 -_08156A3C: - str r0, [r1] -_08156A3E: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08156A50: .4byte sub_8156A54 - thumb_func_end sub_81568DC - - thumb_func_start sub_8156A54 -sub_8156A54: @ 8156A54 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08156B0C @ =gTasks - lsls r2, r0, 2 - mov r8, r2 - add r8, r0 - mov r0, r8 - lsls r0, 3 - mov r8, r0 - add r8, r1 - mov r2, r8 - ldrb r1, [r2, 0x8] - movs r0, 0xA - ldrsh r2, [r2, r0] - mov r9, r2 - mov r2, r8 - ldrb r2, [r2, 0xC] - mov r10, r2 - movs r0, 0x64 - adds r6, r1, 0 - muls r6, r0 - ldr r0, _08156B10 @ =gPlayerParty - adds r6, r0 - adds r0, r6, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r6, 0 - movs r1, 0x19 - bl GetMonData - adds r3, r0, 0 - ldr r6, _08156B14 @ =gExperienceTables - lsls r1, r4, 2 - ldr r2, _08156B18 @ =gBaseStats - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r2 - adds r1, r0 - adds r1, r6 - ldr r1, [r1] - subs r3, r1 - adds r4, 0x1 - lsls r4, 2 - adds r4, r0 - adds r4, r6 - ldr r2, [r4] - subs r2, r1 - ldr r0, _08156B1C @ =gHealthboxSpriteIds - add r0, r10 - ldrb r1, [r0] - mov r0, r9 - negs r0, r0 - str r0, [sp] - mov r0, r10 - bl SetBattleBarStruct - movs r0, 0x1B - bl PlaySE - ldr r0, _08156B20 @ =sub_8156B24 - mov r1, r8 - str r0, [r1] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08156B0C: .4byte gTasks -_08156B10: .4byte gPlayerParty -_08156B14: .4byte gExperienceTables -_08156B18: .4byte gBaseStats -_08156B1C: .4byte gHealthboxSpriteIds -_08156B20: .4byte sub_8156B24 - thumb_func_end sub_8156A54 - - thumb_func_start sub_8156B24 -sub_8156B24: @ 8156B24 - 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 - mov r8, r0 - ldr r1, _08156B50 @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r6, r0, r1 - ldrh r1, [r6, 0x1C] - movs r2, 0x1C - ldrsh r0, [r6, r2] - cmp r0, 0xC - bgt _08156B54 - adds r0, r1, 0x1 - strh r0, [r6, 0x1C] - b _08156C50 - .align 2, 0 -_08156B50: .4byte gTasks -_08156B54: - ldrb r0, [r6, 0x8] - mov r9, r0 - ldrh r2, [r6, 0xA] - mov r10, r2 - ldrb r7, [r6, 0xC] - ldr r5, _08156C1C @ =gHealthboxSpriteIds - adds r5, r7, r5 - ldrb r1, [r5] - adds r0, r7, 0 - movs r2, 0x1 - movs r3, 0 - bl MoveBattleBar - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r5] - bl SetHealthboxSpriteVisible - lsls r4, 16 - asrs r4, 16 - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - bne _08156C50 - movs r0, 0x1B - bl m4aSongNumStop - movs r0, 0x64 - mov r1, r9 - muls r1, r0 - ldr r0, _08156C20 @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0x19 - bl GetMonData - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r3, _08156C24 @ =gExperienceTables - adds r4, 0x1 - lsls r4, 2 - ldr r2, _08156C28 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r1 - adds r4, r0 - adds r4, r3 - ldr r1, [r4] - str r1, [sp] - mov r2, r10 - lsls r0, r2, 16 - asrs r4, r0, 16 - ldr r0, [sp, 0x4] - adds r0, r4 - cmp r0, r1 - blt _08156C34 - adds r0, r5, 0 - movs r1, 0x19 - mov r2, sp - bl SetMonData - adds r0, r5, 0 - bl CalculateMonStats - ldr r2, [sp] - add r0, sp, 0x4 - ldrh r0, [r0] - subs r2, r0 - subs r2, r4, r2 - ldr r4, _08156C2C @ =gActiveBattler - ldrb r5, [r4] - strb r7, [r4] - lsls r2, 16 - lsrs r2, 16 - movs r0, 0x1 - movs r1, 0xB - bl BtlController_EmitTwoReturnValues - strb r5, [r4] - ldr r0, _08156C30 @ =sub_8156C68 - str r0, [r6] - b _08156C50 - .align 2, 0 -_08156C1C: .4byte gHealthboxSpriteIds -_08156C20: .4byte gPlayerParty -_08156C24: .4byte gExperienceTables -_08156C28: .4byte gBaseStats -_08156C2C: .4byte gActiveBattler -_08156C30: .4byte sub_8156C68 -_08156C34: - str r0, [sp, 0x4] - add r2, sp, 0x4 - adds r0, r5, 0 - movs r1, 0x19 - bl SetMonData - ldr r1, _08156C60 @ =gBattlerControllerFuncs - lsls r0, r7, 2 - adds r0, r1 - ldr r1, _08156C64 @ =sub_8156EE8 - str r1, [r0] - mov r0, r8 - bl DestroyTask -_08156C50: - 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 -_08156C60: .4byte gBattlerControllerFuncs -_08156C64: .4byte sub_8156EE8 - thumb_func_end sub_8156B24 - - thumb_func_start sub_8156C68 -sub_8156C68: @ 8156C68 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08156CBC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldrb r4, [r0, 0xC] - ldrb r6, [r0, 0x8] - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08156C9C - ldr r1, _08156CC0 @ =gBattlerPartyIndexes - movs r0, 0x2 - adds r2, r4, 0 - eors r2, r0 - lsls r0, r2, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r6, r0 - bne _08156C9C - adds r4, r2, 0 -_08156C9C: - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r4, 0 - movs r3, 0 - bl InitAndLaunchSpecialAnimation - ldr r0, _08156CBC @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _08156CC4 @ =sub_8156CC8 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08156CBC: .4byte gTasks -_08156CC0: .4byte gBattlerPartyIndexes -_08156CC4: .4byte sub_8156CC8 - thumb_func_end sub_8156C68 - - thumb_func_start sub_8156CC8 -sub_8156CC8: @ 8156CC8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _08156D34 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r2, r0, r1 - ldrb r5, [r2, 0xC] - ldr r0, _08156D38 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0x4] - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08156D6A - ldrb r4, [r2, 0x8] - movs r0, 0x64 - adds r1, r4, 0 - muls r1, r0 - ldr r0, _08156D3C @ =gPlayerParty - adds r7, r1, r0 - adds r0, r7, 0 - movs r1, 0x38 - bl GetMonData - bl IsDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08156D48 - ldr r1, _08156D40 @ =gBattlerPartyIndexes - movs r0, 0x2 - adds r2, r5, 0 - eors r2, r0 - lsls r0, r2, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r4, r0 - bne _08156D48 - ldr r0, _08156D44 @ =gHealthboxSpriteIds - adds r0, r2, r0 - ldrb r0, [r0] - adds r1, r7, 0 - movs r2, 0 - bl UpdateHealthboxAttribute - b _08156D5C - .align 2, 0 -_08156D34: .4byte gTasks -_08156D38: .4byte gBattleSpritesDataPtr -_08156D3C: .4byte gPlayerParty -_08156D40: .4byte gBattlerPartyIndexes -_08156D44: .4byte gHealthboxSpriteIds -_08156D48: - ldr r0, _08156D70 @ =gHealthboxSpriteIds - adds r0, r5, r0 - ldrb r0, [r0] - movs r1, 0x64 - muls r1, r4 - ldr r2, _08156D74 @ =gPlayerParty - adds r1, r2 - movs r2, 0 - bl UpdateHealthboxAttribute -_08156D5C: - ldr r0, _08156D78 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _08156D7C @ =sub_8156D80 - str r0, [r1] -_08156D6A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08156D70: .4byte gHealthboxSpriteIds -_08156D74: .4byte gPlayerParty -_08156D78: .4byte gTasks -_08156D7C: .4byte sub_8156D80 - thumb_func_end sub_8156CC8 - - thumb_func_start sub_8156D80 -sub_8156D80: @ 8156D80 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _08156DBC @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - ldrb r1, [r4, 0x8] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08156DC0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - bl GetMonData - ldrb r0, [r4, 0xC] - ldr r1, _08156DC4 @ =gBattlerControllerFuncs - lsls r0, 2 - adds r0, r1 - ldr r1, _08156DC8 @ =sub_8156EE8 - str r1, [r0] - adds r0, r5, 0 - bl DestroyTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08156DBC: .4byte gTasks -_08156DC0: .4byte gPlayerParty -_08156DC4: .4byte gBattlerControllerFuncs -_08156DC8: .4byte sub_8156EE8 - thumb_func_end sub_8156D80 - - thumb_func_start sub_8156DCC -sub_8156DCC: @ 8156DCC - push {r4-r6,lr} - ldr r4, _08156E2C @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08156E3C - ldr r6, _08156E30 @ =gSprites - ldr r5, _08156E34 @ =gBattlerSpriteIds - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, r0, r6 - movs r1, 0x22 - ldrsh r0, [r2, r1] - movs r3, 0x26 - ldrsh r1, [r2, r3] - adds r0, r1 - cmp r0, 0xA0 - ble _08156E66 - ldrb r0, [r2, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - bl DestroySprite - ldr r1, _08156E38 @ =gHealthboxSpriteIds - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - bl SetHealthboxSpriteInvisible - bl PlayerPartnerBufferExecCompleted - b _08156E66 - .align 2, 0 -_08156E2C: .4byte gActiveBattler -_08156E30: .4byte gSprites -_08156E34: .4byte gBattlerSpriteIds -_08156E38: .4byte gHealthboxSpriteIds -_08156E3C: - ldr r2, _08156E6C @ =gSprites - ldr r0, _08156E70 @ =gBattlerSpriteIds - ldrb r3, [r4] - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - bne _08156E66 - ldr r0, _08156E74 @ =gHealthboxSpriteIds - adds r0, r3, r0 - ldrb r0, [r0] - bl SetHealthboxSpriteInvisible - bl PlayerPartnerBufferExecCompleted -_08156E66: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08156E6C: .4byte gSprites -_08156E70: .4byte gBattlerSpriteIds -_08156E74: .4byte gHealthboxSpriteIds - thumb_func_end sub_8156DCC - - thumb_func_start sub_8156E78 -sub_8156E78: @ 8156E78 - push {r4-r6,lr} - ldr r5, _08156EB8 @ =gActiveBattler - ldrb r0, [r5] - ldr r6, _08156EBC @ =gHealthboxSpriteIds - adds r1, r0, r6 - ldrb r1, [r1] - movs r2, 0 - movs r3, 0 - bl MoveBattleBar - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r5] - adds r0, r6 - ldrb r0, [r0] - bl SetHealthboxSpriteVisible - lsls r4, 16 - asrs r1, r4, 16 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08156EC0 - ldrb r0, [r5] - adds r0, r6 - ldrb r0, [r0] - movs r2, 0 - bl UpdateHpTextInHealthbox - b _08156EDA - .align 2, 0 -_08156EB8: .4byte gActiveBattler -_08156EBC: .4byte gHealthboxSpriteIds -_08156EC0: - ldr r2, _08156EE0 @ =gBattlerPartyIndexes - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _08156EE4 @ =gPlayerParty - adds r0, r2 - bl HandleLowHpMusicChange - bl PlayerPartnerBufferExecCompleted -_08156EDA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08156EE0: .4byte gBattlerPartyIndexes -_08156EE4: .4byte gPlayerParty - thumb_func_end sub_8156E78 - - thumb_func_start sub_8156EE8 -sub_8156EE8: @ 8156EE8 - push {lr} - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _08156EFA - bl PlayerPartnerBufferExecCompleted -_08156EFA: - pop {r0} - bx r0 - thumb_func_end sub_8156EE8 - - thumb_func_start sub_8156F00 -sub_8156F00: @ 8156F00 - push {r4,lr} - ldr r1, _08156F3C @ =gBattlerSpriteIds - ldr r0, _08156F40 @ =gActiveBattler - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - ldr r2, _08156F44 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r2 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x20 - bne _08156F4C - movs r3, 0 - movs r0, 0 - strh r0, [r4, 0x30] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - subs r0, 0x5 - ands r0, r1 - strb r0, [r2] - ldr r0, _08156F48 @ =gDoingBattleAnim - strb r3, [r0] - bl PlayerPartnerBufferExecCompleted - b _08156F76 - .align 2, 0 -_08156F3C: .4byte gBattlerSpriteIds -_08156F40: .4byte gActiveBattler -_08156F44: .4byte gSprites -_08156F48: .4byte gDoingBattleAnim -_08156F4C: - ldrh r0, [r4, 0x30] - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08156F70 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_08156F70: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] -_08156F76: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8156F00 - - thumb_func_start sub_8156F7C -sub_8156F7C: @ 8156F7C - push {r4-r6,lr} - ldr r0, _08156FD8 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r6, _08156FDC @ =gActiveBattler - ldrb r2, [r6] - ldr r1, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08156FD0 - ldr r5, _08156FE0 @ =gBattlerSpriteIds - adds r0, r2, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08156FE4 @ =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r1, _08156FE8 @ =gHealthboxSpriteIds - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - bl SetHealthboxSpriteInvisible - bl PlayerPartnerBufferExecCompleted -_08156FD0: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08156FD8: .4byte gBattleSpritesDataPtr -_08156FDC: .4byte gActiveBattler -_08156FE0: .4byte gBattlerSpriteIds -_08156FE4: .4byte gSprites -_08156FE8: .4byte gHealthboxSpriteIds - thumb_func_end sub_8156F7C - - thumb_func_start sub_8156FEC -sub_8156FEC: @ 8156FEC - push {lr} - ldr r2, _08157014 @ =gSprites - ldr r1, _08157018 @ =gBattlerSpriteIds - ldr r0, _0815701C @ =gActiveBattler - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, [r0] - ldr r0, _08157020 @ =SpriteCallbackDummy - cmp r1, r0 - bne _08157010 - bl PlayerPartnerBufferExecCompleted -_08157010: - pop {r0} - bx r0 - .align 2, 0 -_08157014: .4byte gSprites -_08157018: .4byte gBattlerSpriteIds -_0815701C: .4byte gActiveBattler -_08157020: .4byte SpriteCallbackDummy - thumb_func_end sub_8156FEC - - thumb_func_start sub_8157024 -sub_8157024: @ 8157024 - push {lr} - ldr r0, _0815704C @ =gBattleSpritesDataPtr - ldr r2, [r0] - ldr r0, _08157050 @ =gActiveBattler - ldrb r1, [r0] - ldr r2, [r2, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08157046 - bl PlayerPartnerBufferExecCompleted -_08157046: - pop {r0} - bx r0 - .align 2, 0 -_0815704C: .4byte gBattleSpritesDataPtr -_08157050: .4byte gActiveBattler - thumb_func_end sub_8157024 - - thumb_func_start sub_8157054 -sub_8157054: @ 8157054 - push {lr} - ldr r0, _0815707C @ =gBattleSpritesDataPtr - ldr r2, [r0] - ldr r0, _08157080 @ =gActiveBattler - ldrb r1, [r0] - ldr r2, [r2, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08157076 - bl PlayerPartnerBufferExecCompleted -_08157076: - pop {r0} - bx r0 - .align 2, 0 -_0815707C: .4byte gBattleSpritesDataPtr -_08157080: .4byte gActiveBattler - thumb_func_end sub_8157054 - - thumb_func_start PlayerPartnerBufferExecCompleted -PlayerPartnerBufferExecCompleted: @ 8157084 - push {r4,lr} - sub sp, 0x4 - ldr r1, _081570C4 @ =gBattlerControllerFuncs - ldr r4, _081570C8 @ =gActiveBattler - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _081570CC @ =sub_81560DC - str r1, [r0] - ldr r0, _081570D0 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081570D8 - bl GetMultiplayerId - mov r1, sp - strb r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - mov r2, sp - bl PrepareBufferDataTransferLink - ldr r1, _081570D4 @ =gBattleBufferA - ldrb r0, [r4] - lsls r0, 9 - adds r0, r1 - movs r1, 0x38 - strb r1, [r0] - b _081570EA - .align 2, 0 -_081570C4: .4byte gBattlerControllerFuncs -_081570C8: .4byte gActiveBattler -_081570CC: .4byte sub_81560DC -_081570D0: .4byte gBattleTypeFlags -_081570D4: .4byte gBattleBufferA -_081570D8: - ldr r2, _081570F4 @ =gBattleControllerExecFlags - ldr r1, _081570F8 @ =gBitTable - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, [r2] - bics r0, r1 - str r0, [r2] -_081570EA: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081570F4: .4byte gBattleControllerExecFlags -_081570F8: .4byte gBitTable - thumb_func_end PlayerPartnerBufferExecCompleted - - thumb_func_start CompleteOnFinishedStatusAnimation_7 -CompleteOnFinishedStatusAnimation_7: @ 81570FC - push {lr} - ldr r0, _08157124 @ =gBattleSpritesDataPtr - ldr r2, [r0] - ldr r0, _08157128 @ =gActiveBattler - ldrb r1, [r0] - ldr r2, [r2, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0815711E - bl PlayerPartnerBufferExecCompleted -_0815711E: - pop {r0} - bx r0 - .align 2, 0 -_08157124: .4byte gBattleSpritesDataPtr -_08157128: .4byte gActiveBattler - thumb_func_end CompleteOnFinishedStatusAnimation_7 - - thumb_func_start sub_815712C -sub_815712C: @ 815712C - push {r4-r6,lr} - sub sp, 0x100 - movs r6, 0 - ldr r1, _08157158 @ =gBattleBufferA - ldr r0, _0815715C @ =gActiveBattler - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - bne _08157164 - ldr r0, _08157160 @ =gBattlerPartyIndexes - lsls r1, r2, 1 - adds r1, r0 - ldrb r0, [r1] - mov r1, sp - bl sub_81571A0 - adds r6, r0, 0 - b _08157186 - .align 2, 0 -_08157158: .4byte gBattleBufferA -_0815715C: .4byte gActiveBattler -_08157160: .4byte gBattlerPartyIndexes -_08157164: - ldrb r4, [r1] - movs r5, 0 -_08157168: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0815717E - lsls r0, r5, 24 - lsrs r0, 24 - mov r2, sp - adds r1, r2, r6 - bl sub_81571A0 - adds r6, r0 -_0815717E: - lsrs r4, 1 - adds r5, 0x1 - cmp r5, 0x5 - ble _08157168 -_08157186: - lsls r1, r6, 16 - lsrs r1, 16 - movs r0, 0x1 - mov r2, sp - bl BtlController_EmitDataTransfer - bl PlayerPartnerBufferExecCompleted - add sp, 0x100 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_815712C - - thumb_func_start sub_81571A0 -sub_81571A0: @ 81571A0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8C - adds r7, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _081571CC @ =gActiveBattler - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _081571D4 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _081571D0 @ =gPlayerParty - b _081571DC - .align 2, 0 -_081571CC: .4byte gActiveBattler -_081571D0: .4byte gPlayerParty -_081571D4: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _081571FC @ =gEnemyParty -_081571DC: - adds r6, r1, r0 - ldr r3, _08157200 @ =gBattleBufferA - ldr r2, _08157204 @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 9 - adds r1, r3, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x3B - bls _081571F2 - b _0815773C -_081571F2: - lsls r0, 2 - ldr r1, _08157208 @ =_0815720C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081571FC: .4byte gEnemyParty -_08157200: .4byte gBattleBufferA -_08157204: .4byte gActiveBattler -_08157208: .4byte _0815720C - .align 2, 0 -_0815720C: - .4byte _081572FC - .4byte _08157508 - .4byte _0815750E - .4byte _08157514 - .4byte _08157564 - .4byte _08157564 - .4byte _08157564 - .4byte _08157564 - .4byte _08157574 - .4byte _0815759A - .4byte _0815759A - .4byte _0815759A - .4byte _0815759A - .4byte _0815773C - .4byte _0815773C - .4byte _0815773C - .4byte _0815773C - .4byte _081575AA - .4byte _081575B0 - .4byte _081575D4 - .4byte _081575DA - .4byte _081575E0 - .4byte _081575E6 - .4byte _081575EC - .4byte _081575F2 - .4byte _081575F8 - .4byte _081575FE - .4byte _08157604 - .4byte _0815760A - .4byte _08157610 - .4byte _08157616 - .4byte _0815761C - .4byte _0815765C - .4byte _08157662 - .4byte _08157668 - .4byte _0815766E - .4byte _08157674 - .4byte _0815767A - .4byte _08157680 - .4byte _08157686 - .4byte _0815768C - .4byte _081576B4 - .4byte _081576BA - .4byte _081576C0 - .4byte _081576C6 - .4byte _081576CC - .4byte _081576D2 - .4byte _081576D8 - .4byte _081576DE - .4byte _081576F4 - .4byte _081576FA - .4byte _08157700 - .4byte _08157706 - .4byte _0815770C - .4byte _08157712 - .4byte _08157718 - .4byte _0815771E - .4byte _08157724 - .4byte _0815772A - .4byte _08157730 -_081572FC: - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - mov r1, sp - strh r0, [r1] - adds r0, r6, 0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2E] - movs r4, 0 - add r0, sp, 0x24 - mov r8, r0 - movs r1, 0x3B - add r1, sp - mov r9, r1 - movs r2, 0x2B - add r2, sp - mov r10, r2 - mov r0, sp - adds r0, 0x2A - str r0, [sp, 0x7C] - mov r1, sp - adds r1, 0x68 - str r1, [sp, 0x88] - mov r2, sp - adds r2, 0x30 - str r2, [sp, 0x80] - adds r0, 0x12 - str r0, [sp, 0x84] - add r5, sp, 0xC -_0815733E: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r6, 0 - bl GetMonData - strh r0, [r5] - adds r1, r4, 0 - adds r1, 0x11 - adds r0, r6, 0 - bl GetMonData - mov r2, r8 - adds r1, r2, r4 - strb r0, [r1] - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _0815733E - adds r0, r6, 0 - movs r1, 0x15 - bl GetMonData - mov r1, r9 - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x20 - bl GetMonData - mov r2, r10 - strb r0, [r2] - adds r0, r6, 0 - movs r1, 0x19 - bl GetMonData - str r0, [sp, 0x44] - adds r0, r6, 0 - movs r1, 0x27 - bl GetMonData - mov r3, sp - movs r4, 0x1F - ands r0, r4 - ldrb r2, [r3, 0x14] - movs r1, 0x20 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x14] - adds r0, r6, 0 - movs r1, 0x28 - bl GetMonData - mov r3, sp - movs r5, 0x1F - ands r0, r5 - lsls r0, 5 - ldrh r2, [r3, 0x14] - ldr r1, _081574FC @ =0xfffffc1f - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x14] - adds r0, r6, 0 - movs r1, 0x29 - bl GetMonData - mov r3, sp - ands r0, r4 - lsls r0, 2 - ldrb r2, [r3, 0x15] - movs r1, 0x7D - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x15] - adds r0, r6, 0 - movs r1, 0x2A - bl GetMonData - movs r1, 0x1F - ands r1, r0 - lsls r1, 15 - ldr r0, [sp, 0x14] - ldr r2, _08157500 @ =0xfff07fff - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x14] - adds r0, r6, 0 - movs r1, 0x2B - bl GetMonData - mov r3, sp - ands r0, r5 - lsls r0, 4 - ldrh r2, [r3, 0x16] - ldr r1, _08157504 @ =0xfffffe0f - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x16] - adds r0, r6, 0 - movs r1, 0x2C - bl GetMonData - mov r3, sp - ands r0, r4 - lsls r0, 1 - ldrb r2, [r3, 0x17] - movs r1, 0x3F - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r6, 0 - movs r1, 0 - bl GetMonData - str r0, [sp, 0x48] - adds r0, r6, 0 - movs r1, 0x37 - bl GetMonData - str r0, [sp, 0x4C] - adds r0, r6, 0 - movs r1, 0x38 - bl GetMonData - ldr r1, [sp, 0x7C] - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x39 - bl GetMonData - mov r1, sp - strh r0, [r1, 0x28] - adds r0, r6, 0 - movs r1, 0x3A - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2C] - adds r0, r6, 0 - movs r1, 0x3B - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2] - adds r0, r6, 0 - movs r1, 0x3C - bl GetMonData - mov r1, sp - strh r0, [r1, 0x4] - adds r0, r6, 0 - movs r1, 0x3D - bl GetMonData - mov r1, sp - strh r0, [r1, 0x6] - adds r0, r6, 0 - movs r1, 0x3E - bl GetMonData - mov r1, sp - strh r0, [r1, 0x8] - adds r0, r6, 0 - movs r1, 0x3F - bl GetMonData - mov r1, sp - strh r0, [r1, 0xA] - adds r0, r6, 0 - movs r1, 0x2D - bl GetMonData - mov r3, sp - movs r1, 0x1 - ands r0, r1 - lsls r0, 6 - ldrb r2, [r3, 0x17] - movs r1, 0x41 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r6, 0 - movs r1, 0x2E - bl GetMonData - mov r3, sp - lsls r0, 7 - ldrb r2, [r3, 0x17] - movs r1, 0x7F - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r6, 0 - movs r1, 0x1 - bl GetMonData - str r0, [sp, 0x54] - adds r0, r6, 0 - movs r1, 0x2 - ldr r2, [sp, 0x88] - bl GetMonData - ldr r0, [sp, 0x80] - ldr r1, [sp, 0x88] - bl StringCopy10 - adds r0, r6, 0 - movs r1, 0x7 - ldr r2, [sp, 0x84] - bl GetMonData - mov r2, sp - movs r4, 0 -_081574EC: - adds r0, r7, r4 - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0x57 - bls _081574EC - b _0815773C - .align 2, 0 -_081574FC: .4byte 0xfffffc1f -_08157500: .4byte 0xfff07fff -_08157504: .4byte 0xfffffe0f -_08157508: - adds r0, r6, 0 - movs r1, 0xB - b _081576E2 -_0815750E: - adds r0, r6, 0 - movs r1, 0xC - b _081576E2 -_08157514: - movs r4, 0 - add r2, sp, 0x58 - mov r8, r2 - add r0, sp, 0x60 - mov r9, r0 - mov r5, r8 -_08157520: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r6, 0 - bl GetMonData - strh r0, [r5] - adds r1, r4, 0 - adds r1, 0x11 - adds r0, r6, 0 - bl GetMonData - mov r2, r9 - adds r1, r2, r4 - strb r0, [r1] - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _08157520 - adds r0, r6, 0 - movs r1, 0x15 - bl GetMonData - mov r1, r8 - strb r0, [r1, 0xC] - mov r2, r8 - movs r4, 0 -_08157554: - adds r0, r7, r4 - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0xF - bls _08157554 - b _0815773C -_08157564: - ldrb r0, [r2] - lsls r0, 9 - adds r1, r3, 0x1 - adds r0, r1 - ldrb r1, [r0] - adds r1, 0x9 - adds r0, r6, 0 - b _081576E2 -_08157574: - movs r4, 0 -_08157576: - adds r1, r4, 0 - adds r1, 0x11 - adds r0, r6, 0 - bl GetMonData - adds r1, r7, r4 - strb r0, [r1] - adds r4, 0x1 - cmp r4, 0x3 - ble _08157576 - adds r0, r6, 0 - movs r1, 0x15 - bl GetMonData - adds r1, r7, r4 - strb r0, [r1] - adds r4, 0x1 - b _0815773C -_0815759A: - ldrb r0, [r2] - lsls r0, 9 - adds r1, r3, 0x1 - adds r0, r1 - ldrb r1, [r0] - adds r1, 0x8 - adds r0, r6, 0 - b _08157734 -_081575AA: - adds r0, r6, 0 - movs r1, 0x1 - b _081575B4 -_081575B0: - adds r0, r6, 0 - movs r1, 0x19 -_081575B4: - bl GetMonData - adds r1, r0, 0 - strb r1, [r7] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r0, 0xFF - lsls r0, 16 - ands r0, r1 - lsrs r0, 16 - strb r0, [r7, 0x2] - movs r4, 0x3 - b _0815773C -_081575D4: - adds r0, r6, 0 - movs r1, 0x1A - b _08157734 -_081575DA: - adds r0, r6, 0 - movs r1, 0x1B - b _08157734 -_081575E0: - adds r0, r6, 0 - movs r1, 0x1C - b _08157734 -_081575E6: - adds r0, r6, 0 - movs r1, 0x1D - b _08157734 -_081575EC: - adds r0, r6, 0 - movs r1, 0x1E - b _08157734 -_081575F2: - adds r0, r6, 0 - movs r1, 0x1F - b _08157734 -_081575F8: - adds r0, r6, 0 - movs r1, 0x20 - b _08157734 -_081575FE: - adds r0, r6, 0 - movs r1, 0x22 - b _08157734 -_08157604: - adds r0, r6, 0 - movs r1, 0x23 - b _08157734 -_0815760A: - adds r0, r6, 0 - movs r1, 0x24 - b _08157734 -_08157610: - adds r0, r6, 0 - movs r1, 0x25 - b _08157734 -_08157616: - adds r0, r6, 0 - movs r1, 0x26 - b _08157734 -_0815761C: - adds r0, r6, 0 - movs r1, 0x27 - bl GetMonData - strb r0, [r7] - adds r0, r6, 0 - movs r1, 0x28 - bl GetMonData - strb r0, [r7, 0x1] - adds r0, r6, 0 - movs r1, 0x29 - bl GetMonData - strb r0, [r7, 0x2] - adds r0, r6, 0 - movs r1, 0x2A - bl GetMonData - strb r0, [r7, 0x3] - adds r0, r6, 0 - movs r1, 0x2B - bl GetMonData - strb r0, [r7, 0x4] - adds r0, r6, 0 - movs r1, 0x2C - bl GetMonData - strb r0, [r7, 0x5] - movs r4, 0x6 - b _0815773C -_0815765C: - adds r0, r6, 0 - movs r1, 0x27 - b _08157734 -_08157662: - adds r0, r6, 0 - movs r1, 0x28 - b _08157734 -_08157668: - adds r0, r6, 0 - movs r1, 0x29 - b _08157734 -_0815766E: - adds r0, r6, 0 - movs r1, 0x2A - b _08157734 -_08157674: - adds r0, r6, 0 - movs r1, 0x2B - b _08157734 -_0815767A: - adds r0, r6, 0 - movs r1, 0x2C - b _08157734 -_08157680: - adds r0, r6, 0 - movs r1, 0 - b _08157690 -_08157686: - adds r0, r6, 0 - movs r1, 0x9 - b _081576E2 -_0815768C: - adds r0, r6, 0 - movs r1, 0x37 -_08157690: - bl GetMonData - adds r1, r0, 0 - strb r1, [r7] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r0, 0xFF - lsls r0, 16 - ands r0, r1 - lsrs r0, 16 - strb r0, [r7, 0x2] - lsrs r0, r1, 24 - strb r0, [r7, 0x3] - movs r4, 0x4 - b _0815773C -_081576B4: - adds r0, r6, 0 - movs r1, 0x38 - b _08157734 -_081576BA: - adds r0, r6, 0 - movs r1, 0x39 - b _081576E2 -_081576C0: - adds r0, r6, 0 - movs r1, 0x3A - b _081576E2 -_081576C6: - adds r0, r6, 0 - movs r1, 0x3B - b _081576E2 -_081576CC: - adds r0, r6, 0 - movs r1, 0x3C - b _081576E2 -_081576D2: - adds r0, r6, 0 - movs r1, 0x3D - b _081576E2 -_081576D8: - adds r0, r6, 0 - movs r1, 0x3E - b _081576E2 -_081576DE: - adds r0, r6, 0 - movs r1, 0x3F -_081576E2: - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - strb r0, [r7] - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r4, 0x2 - b _0815773C -_081576F4: - adds r0, r6, 0 - movs r1, 0x16 - b _08157734 -_081576FA: - adds r0, r6, 0 - movs r1, 0x17 - b _08157734 -_08157700: - adds r0, r6, 0 - movs r1, 0x18 - b _08157734 -_08157706: - adds r0, r6, 0 - movs r1, 0x21 - b _08157734 -_0815770C: - adds r0, r6, 0 - movs r1, 0x2F - b _08157734 -_08157712: - adds r0, r6, 0 - movs r1, 0x30 - b _08157734 -_08157718: - adds r0, r6, 0 - movs r1, 0x32 - b _08157734 -_0815771E: - adds r0, r6, 0 - movs r1, 0x33 - b _08157734 -_08157724: - adds r0, r6, 0 - movs r1, 0x34 - b _08157734 -_0815772A: - adds r0, r6, 0 - movs r1, 0x35 - b _08157734 -_08157730: - adds r0, r6, 0 - movs r1, 0x36 -_08157734: - bl GetMonData - strb r0, [r7] - movs r4, 0x1 -_0815773C: - adds r0, r4, 0 - add sp, 0x8C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81571A0 - - thumb_func_start sub_8157750 -sub_8157750: @ 8157750 - push {lr} - bl PlayerHandleGetRawMonData - pop {r0} - bx r0 - thumb_func_end sub_8157750 - - thumb_func_start sub_815775C -sub_815775C: @ 815775C - push {r4,r5,lr} - ldr r1, _08157780 @ =gBattleBufferA - ldr r0, _08157784 @ =gActiveBattler - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - bne _0815778C - ldr r0, _08157788 @ =gBattlerPartyIndexes - lsls r1, r2, 1 - adds r1, r0 - ldrb r0, [r1] - bl sub_81577B4 - b _081577AA - .align 2, 0 -_08157780: .4byte gBattleBufferA -_08157784: .4byte gActiveBattler -_08157788: .4byte gBattlerPartyIndexes -_0815778C: - ldrb r4, [r1] - movs r5, 0 -_08157790: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0815779E - adds r0, r5, 0 - bl sub_81577B4 -_0815779E: - lsrs r4, 1 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _08157790 -_081577AA: - bl PlayerPartnerBufferExecCompleted - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_815775C - - thumb_func_start sub_81577B4 -sub_81577B4: @ 81577B4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x30 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _081577E4 @ =gActiveBattler - ldrb r0, [r0] - lsls r2, r0, 9 - ldr r1, _081577E8 @ =gBattleBufferA + 3 - adds r5, r2, r1 - mov r8, r5 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _081577F0 - movs r0, 0x64 - adds r1, r4, 0 - muls r1, r0 - ldr r0, _081577EC @ =gPlayerParty - b _081577F8 - .align 2, 0 -_081577E4: .4byte gActiveBattler -_081577E8: .4byte gBattleBufferA + 3 -_081577EC: .4byte gPlayerParty -_081577F0: - movs r0, 0x64 - adds r1, r4, 0 - muls r1, r0 - ldr r0, _0815781C @ =gEnemyParty -_081577F8: - adds r6, r1, r0 - ldr r2, _08157820 @ =gBattleBufferA - ldr r0, _08157824 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 9 - adds r1, r2, 0x1 - adds r0, r1 - ldrb r0, [r0] - adds r3, r2, 0 - cmp r0, 0x3B - bls _08157812 - bl _0815809A -_08157812: - lsls r0, 2 - ldr r1, _08157828 @ =_0815782C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0815781C: .4byte gEnemyParty -_08157820: .4byte gBattleBufferA -_08157824: .4byte gActiveBattler -_08157828: .4byte _0815782C - .align 2, 0 -_0815782C: - .4byte _0815791C - .4byte _08157AA4 - .4byte _08157AC0 - .4byte _08157ADC - .4byte _08157B16 - .4byte _08157B16 - .4byte _08157B16 - .4byte _08157B16 - .4byte _08157B2C - .4byte _08157B88 - .4byte _08157B88 - .4byte _08157B88 - .4byte _08157B88 - .4byte _0815809A - .4byte _0815809A - .4byte _0815809A - .4byte _0815809A - .4byte _08157BA8 - .4byte _08157BC4 - .4byte _08157BE0 - .4byte _08157BFC - .4byte _08157C18 - .4byte _08157C34 - .4byte _08157C50 - .4byte _08157C6C - .4byte _08157C88 - .4byte _08157CA4 - .4byte _08157CC0 - .4byte _08157CDC - .4byte _08157CF8 - .4byte _08157D14 - .4byte _08157D30 - .4byte _08157D94 - .4byte _08157DB0 - .4byte _08157DCC - .4byte _08157DE8 - .4byte _08157E04 - .4byte _08157E20 - .4byte _08157E3C - .4byte _08157E58 - .4byte _08157E74 - .4byte _08157E90 - .4byte _08157EAC - .4byte _08157EC8 - .4byte _08157EE4 - .4byte _08157F00 - .4byte _08157F1C - .4byte _08157F38 - .4byte _08157F54 - .4byte _08157F70 - .4byte _08157F8C - .4byte _08157FA8 - .4byte _08157FC4 - .4byte _08157FE0 - .4byte _08157FFC - .4byte _08158018 - .4byte _08158034 - .4byte _08158050 - .4byte _0815806C - .4byte _08158088 -_0815791C: - adds r0, r6, 0 - movs r1, 0xB - mov r2, r8 - bl SetMonData - mov r2, r8 - adds r2, 0x2E - adds r0, r6, 0 - movs r1, 0xC - bl SetMonData - movs r4, 0 - movs r0, 0x3B - add r0, r8 - mov r9, r0 - movs r1, 0x2B - add r1, r8 - mov r10, r1 - mov r2, r8 - adds r2, 0x44 - str r2, [sp, 0x10] - mov r0, r8 - adds r0, 0x48 - str r0, [sp, 0x14] - mov r1, r8 - adds r1, 0x4C - str r1, [sp, 0x18] - subs r2, 0x1A - str r2, [sp, 0x8] - subs r0, 0x20 - str r0, [sp, 0x4] - subs r1, 0x20 - str r1, [sp, 0xC] - subs r2, 0x28 - str r2, [sp, 0x1C] - subs r0, 0x24 - str r0, [sp, 0x20] - subs r1, 0x26 - str r1, [sp, 0x24] - adds r2, 0x6 - str r2, [sp, 0x28] - adds r0, 0x6 - str r0, [sp, 0x2C] - mov r7, r8 - adds r7, 0x24 - mov r5, r8 - adds r5, 0xC -_0815797A: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r6, 0 - adds r2, r5, 0 - bl SetMonData - adds r1, r4, 0 - adds r1, 0x11 - adds r0, r6, 0 - adds r2, r7, 0 - bl SetMonData - adds r7, 0x1 - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _0815797A - adds r0, r6, 0 - movs r1, 0x15 - mov r2, r9 - bl SetMonData - adds r0, r6, 0 - movs r1, 0x20 - mov r2, r10 - bl SetMonData - adds r0, r6, 0 - movs r1, 0x19 - ldr r2, [sp, 0x10] - bl SetMonData - mov r1, r8 - ldrb r0, [r1, 0x14] - lsls r0, 27 - lsrs r0, 27 - mov r1, sp - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x27 - mov r2, sp - bl SetMonData - mov r1, sp - mov r2, r8 - ldrh r0, [r2, 0x14] - lsls r0, 22 - lsrs r0, 27 - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x28 - mov r2, sp - bl SetMonData - mov r1, sp - mov r2, r8 - ldrb r0, [r2, 0x15] - lsls r0, 25 - lsrs r0, 27 - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x29 - mov r2, sp - bl SetMonData - mov r1, sp - mov r2, r8 - ldr r0, [r2, 0x14] - lsls r0, 12 - lsrs r0, 27 - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x2A - mov r2, sp - bl SetMonData - mov r1, sp - mov r2, r8 - ldrh r0, [r2, 0x16] - lsls r0, 23 - lsrs r0, 27 - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x2B - mov r2, sp - bl SetMonData - mov r1, sp - mov r2, r8 - ldrb r0, [r2, 0x17] - lsls r0, 26 - lsrs r0, 27 - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x2C - mov r2, sp - bl SetMonData - adds r0, r6, 0 - movs r1, 0 - ldr r2, [sp, 0x14] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x37 - ldr r2, [sp, 0x18] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x38 - ldr r2, [sp, 0x8] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x39 - ldr r2, [sp, 0x4] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x3A - ldr r2, [sp, 0xC] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x3B - ldr r2, [sp, 0x1C] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x3C - ldr r2, [sp, 0x20] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x3D - ldr r2, [sp, 0x24] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x3E - ldr r2, [sp, 0x28] - bl SetMonData - adds r0, r6, 0 - movs r1, 0x3F - ldr r2, [sp, 0x2C] - bl SetMonData - b _0815809A -_08157AA4: - ldr r0, _08157AB8 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157ABC @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0xB - bl SetMonData - b _0815809A - .align 2, 0 -_08157AB8: .4byte gActiveBattler -_08157ABC: .4byte gBattleBufferA + 3 -_08157AC0: - ldr r0, _08157AD4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157AD8 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0xC - bl SetMonData - b _0815809A - .align 2, 0 -_08157AD4: .4byte gActiveBattler -_08157AD8: .4byte gBattleBufferA + 3 -_08157ADC: - movs r4, 0 - movs r0, 0xC - adds r0, r5 - mov r8, r0 - adds r7, r5, 0 - adds r7, 0x8 -_08157AE8: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r6, 0 - adds r2, r5, 0 - bl SetMonData - adds r1, r4, 0 - adds r1, 0x11 - adds r0, r6, 0 - adds r2, r7, 0 - bl SetMonData - adds r7, 0x1 - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _08157AE8 - adds r0, r6, 0 - movs r1, 0x15 - mov r2, r8 - bl SetMonData - b _0815809A -_08157B16: - ldr r0, _08157B28 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - adds r0, r3, 0x1 - adds r0, r2, r0 - ldrb r1, [r0] - adds r1, 0x9 - b _08157B96 - .align 2, 0 -_08157B28: .4byte gActiveBattler -_08157B2C: - ldr r5, _08157B80 @ =gActiveBattler - ldrb r2, [r5] - lsls r2, 9 - ldr r4, _08157B84 @ =gBattleBufferA + 3 - adds r2, r4 - adds r0, r6, 0 - movs r1, 0x11 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r4, 0x1 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x12 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r4, 0x2 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x13 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r4, 0x3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x14 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r4, 0x4 - adds r2, r4 - adds r0, r6, 0 - movs r1, 0x15 - bl SetMonData - b _0815809A - .align 2, 0 -_08157B80: .4byte gActiveBattler -_08157B84: .4byte gBattleBufferA + 3 -_08157B88: - ldr r0, _08157BA4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - adds r0, r3, 0x1 - adds r0, r2, r0 - ldrb r1, [r0] - adds r1, 0x8 -_08157B96: - adds r0, r3, 0x3 - adds r2, r0 - adds r0, r6, 0 - bl SetMonData - b _0815809A - .align 2, 0 -_08157BA4: .4byte gActiveBattler -_08157BA8: - ldr r0, _08157BBC @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157BC0 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x1 - bl SetMonData - b _0815809A - .align 2, 0 -_08157BBC: .4byte gActiveBattler -_08157BC0: .4byte gBattleBufferA + 3 -_08157BC4: - ldr r0, _08157BD8 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157BDC @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x19 - bl SetMonData - b _0815809A - .align 2, 0 -_08157BD8: .4byte gActiveBattler -_08157BDC: .4byte gBattleBufferA + 3 -_08157BE0: - ldr r0, _08157BF4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157BF8 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x1A - bl SetMonData - b _0815809A - .align 2, 0 -_08157BF4: .4byte gActiveBattler -_08157BF8: .4byte gBattleBufferA + 3 -_08157BFC: - ldr r0, _08157C10 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157C14 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x1B - bl SetMonData - b _0815809A - .align 2, 0 -_08157C10: .4byte gActiveBattler -_08157C14: .4byte gBattleBufferA + 3 -_08157C18: - ldr r0, _08157C2C @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157C30 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x1C - bl SetMonData - b _0815809A - .align 2, 0 -_08157C2C: .4byte gActiveBattler -_08157C30: .4byte gBattleBufferA + 3 -_08157C34: - ldr r0, _08157C48 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157C4C @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x1D - bl SetMonData - b _0815809A - .align 2, 0 -_08157C48: .4byte gActiveBattler -_08157C4C: .4byte gBattleBufferA + 3 -_08157C50: - ldr r0, _08157C64 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157C68 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x1E - bl SetMonData - b _0815809A - .align 2, 0 -_08157C64: .4byte gActiveBattler -_08157C68: .4byte gBattleBufferA + 3 -_08157C6C: - ldr r0, _08157C80 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157C84 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x1F - bl SetMonData - b _0815809A - .align 2, 0 -_08157C80: .4byte gActiveBattler -_08157C84: .4byte gBattleBufferA + 3 -_08157C88: - ldr r0, _08157C9C @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157CA0 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x20 - bl SetMonData - b _0815809A - .align 2, 0 -_08157C9C: .4byte gActiveBattler -_08157CA0: .4byte gBattleBufferA + 3 -_08157CA4: - ldr r0, _08157CB8 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157CBC @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x22 - bl SetMonData - b _0815809A - .align 2, 0 -_08157CB8: .4byte gActiveBattler -_08157CBC: .4byte gBattleBufferA + 3 -_08157CC0: - ldr r0, _08157CD4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157CD8 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x23 - bl SetMonData - b _0815809A - .align 2, 0 -_08157CD4: .4byte gActiveBattler -_08157CD8: .4byte gBattleBufferA + 3 -_08157CDC: - ldr r0, _08157CF0 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157CF4 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x24 - bl SetMonData - b _0815809A - .align 2, 0 -_08157CF0: .4byte gActiveBattler -_08157CF4: .4byte gBattleBufferA + 3 -_08157CF8: - ldr r0, _08157D0C @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157D10 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x25 - bl SetMonData - b _0815809A - .align 2, 0 -_08157D0C: .4byte gActiveBattler -_08157D10: .4byte gBattleBufferA + 3 -_08157D14: - ldr r0, _08157D28 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157D2C @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x26 - bl SetMonData - b _0815809A - .align 2, 0 -_08157D28: .4byte gActiveBattler -_08157D2C: .4byte gBattleBufferA + 3 -_08157D30: - ldr r5, _08157D8C @ =gActiveBattler - ldrb r2, [r5] - lsls r2, 9 - ldr r4, _08157D90 @ =gBattleBufferA + 3 - adds r2, r4 - adds r0, r6, 0 - movs r1, 0x27 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r4, 0x1 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x28 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r4, 0x2 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x29 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r4, 0x3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x2A - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r4, 0x4 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x2B - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r4, 0x5 - adds r2, r4 - b _08157E2A - .align 2, 0 -_08157D8C: .4byte gActiveBattler -_08157D90: .4byte gBattleBufferA + 3 -_08157D94: - ldr r0, _08157DA8 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157DAC @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x27 - bl SetMonData - b _0815809A - .align 2, 0 -_08157DA8: .4byte gActiveBattler -_08157DAC: .4byte gBattleBufferA + 3 -_08157DB0: - ldr r0, _08157DC4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157DC8 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x28 - bl SetMonData - b _0815809A - .align 2, 0 -_08157DC4: .4byte gActiveBattler -_08157DC8: .4byte gBattleBufferA + 3 -_08157DCC: - ldr r0, _08157DE0 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157DE4 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x29 - bl SetMonData - b _0815809A - .align 2, 0 -_08157DE0: .4byte gActiveBattler -_08157DE4: .4byte gBattleBufferA + 3 -_08157DE8: - ldr r0, _08157DFC @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157E00 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x2A - bl SetMonData - b _0815809A - .align 2, 0 -_08157DFC: .4byte gActiveBattler -_08157E00: .4byte gBattleBufferA + 3 -_08157E04: - ldr r0, _08157E18 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157E1C @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x2B - bl SetMonData - b _0815809A - .align 2, 0 -_08157E18: .4byte gActiveBattler -_08157E1C: .4byte gBattleBufferA + 3 -_08157E20: - ldr r0, _08157E34 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157E38 @ =gBattleBufferA + 3 - adds r2, r0 -_08157E2A: - adds r0, r6, 0 - movs r1, 0x2C - bl SetMonData - b _0815809A - .align 2, 0 -_08157E34: .4byte gActiveBattler -_08157E38: .4byte gBattleBufferA + 3 -_08157E3C: - ldr r0, _08157E50 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157E54 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0 - bl SetMonData - b _0815809A - .align 2, 0 -_08157E50: .4byte gActiveBattler -_08157E54: .4byte gBattleBufferA + 3 -_08157E58: - ldr r0, _08157E6C @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157E70 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x9 - bl SetMonData - b _0815809A - .align 2, 0 -_08157E6C: .4byte gActiveBattler -_08157E70: .4byte gBattleBufferA + 3 -_08157E74: - ldr r0, _08157E88 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157E8C @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x37 - bl SetMonData - b _0815809A - .align 2, 0 -_08157E88: .4byte gActiveBattler -_08157E8C: .4byte gBattleBufferA + 3 -_08157E90: - ldr r0, _08157EA4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157EA8 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x38 - bl SetMonData - b _0815809A - .align 2, 0 -_08157EA4: .4byte gActiveBattler -_08157EA8: .4byte gBattleBufferA + 3 -_08157EAC: - ldr r0, _08157EC0 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157EC4 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x39 - bl SetMonData - b _0815809A - .align 2, 0 -_08157EC0: .4byte gActiveBattler -_08157EC4: .4byte gBattleBufferA + 3 -_08157EC8: - ldr r0, _08157EDC @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157EE0 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x3A - bl SetMonData - b _0815809A - .align 2, 0 -_08157EDC: .4byte gActiveBattler -_08157EE0: .4byte gBattleBufferA + 3 -_08157EE4: - ldr r0, _08157EF8 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157EFC @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x3B - bl SetMonData - b _0815809A - .align 2, 0 -_08157EF8: .4byte gActiveBattler -_08157EFC: .4byte gBattleBufferA + 3 -_08157F00: - ldr r0, _08157F14 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157F18 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x3C - bl SetMonData - b _0815809A - .align 2, 0 -_08157F14: .4byte gActiveBattler -_08157F18: .4byte gBattleBufferA + 3 -_08157F1C: - ldr r0, _08157F30 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157F34 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x3D - bl SetMonData - b _0815809A - .align 2, 0 -_08157F30: .4byte gActiveBattler -_08157F34: .4byte gBattleBufferA + 3 -_08157F38: - ldr r0, _08157F4C @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157F50 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x3E - bl SetMonData - b _0815809A - .align 2, 0 -_08157F4C: .4byte gActiveBattler -_08157F50: .4byte gBattleBufferA + 3 -_08157F54: - ldr r0, _08157F68 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157F6C @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x3F - bl SetMonData - b _0815809A - .align 2, 0 -_08157F68: .4byte gActiveBattler -_08157F6C: .4byte gBattleBufferA + 3 -_08157F70: - ldr r0, _08157F84 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157F88 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x16 - bl SetMonData - b _0815809A - .align 2, 0 -_08157F84: .4byte gActiveBattler -_08157F88: .4byte gBattleBufferA + 3 -_08157F8C: - ldr r0, _08157FA0 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157FA4 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x17 - bl SetMonData - b _0815809A - .align 2, 0 -_08157FA0: .4byte gActiveBattler -_08157FA4: .4byte gBattleBufferA + 3 -_08157FA8: - ldr r0, _08157FBC @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157FC0 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x18 - bl SetMonData - b _0815809A - .align 2, 0 -_08157FBC: .4byte gActiveBattler -_08157FC0: .4byte gBattleBufferA + 3 -_08157FC4: - ldr r0, _08157FD8 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157FDC @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x21 - bl SetMonData - b _0815809A - .align 2, 0 -_08157FD8: .4byte gActiveBattler -_08157FDC: .4byte gBattleBufferA + 3 -_08157FE0: - ldr r0, _08157FF4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08157FF8 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x2F - bl SetMonData - b _0815809A - .align 2, 0 -_08157FF4: .4byte gActiveBattler -_08157FF8: .4byte gBattleBufferA + 3 -_08157FFC: - ldr r0, _08158010 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08158014 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x30 - bl SetMonData - b _0815809A - .align 2, 0 -_08158010: .4byte gActiveBattler -_08158014: .4byte gBattleBufferA + 3 -_08158018: - ldr r0, _0815802C @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08158030 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x32 - bl SetMonData - b _0815809A - .align 2, 0 -_0815802C: .4byte gActiveBattler -_08158030: .4byte gBattleBufferA + 3 -_08158034: - ldr r0, _08158048 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _0815804C @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x33 - bl SetMonData - b _0815809A - .align 2, 0 -_08158048: .4byte gActiveBattler -_0815804C: .4byte gBattleBufferA + 3 -_08158050: - ldr r0, _08158064 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08158068 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x34 - bl SetMonData - b _0815809A - .align 2, 0 -_08158064: .4byte gActiveBattler -_08158068: .4byte gBattleBufferA + 3 -_0815806C: - ldr r0, _08158080 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _08158084 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x35 - bl SetMonData - b _0815809A - .align 2, 0 -_08158080: .4byte gActiveBattler -_08158084: .4byte gBattleBufferA + 3 -_08158088: - ldr r0, _081580C4 @ =gActiveBattler - ldrb r2, [r0] - lsls r2, 9 - ldr r0, _081580C8 @ =gBattleBufferA + 3 - adds r2, r0 - adds r0, r6, 0 - movs r1, 0x36 - bl SetMonData -_0815809A: - ldr r2, _081580CC @ =gBattlerPartyIndexes - ldr r0, _081580C4 @ =gActiveBattler - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _081580D0 @ =gPlayerParty - adds r0, r2 - bl HandleLowHpMusicChange - add sp, 0x30 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081580C4: .4byte gActiveBattler -_081580C8: .4byte gBattleBufferA + 3 -_081580CC: .4byte gBattlerPartyIndexes -_081580D0: .4byte gPlayerParty - thumb_func_end sub_81577B4 - - thumb_func_start sub_81580D4 -sub_81580D4: @ 81580D4 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_81580D4 - - thumb_func_start sub_81580E0 -sub_81580E0: @ 81580E0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r6, _08158214 @ =gActiveBattler - ldrb r0, [r6] - lsls r0, 1 - ldr r1, _08158218 @ =gBattlerPartyIndexes - adds r0, r1 - ldrh r0, [r0] - movs r7, 0x64 - muls r0, r7 - ldr r2, _0815821C @ =gEnemyParty - mov r10, r2 - add r0, r10 - movs r1, 0xB - bl GetMonData - mov r8, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldrb r1, [r6] - lsls r0, r1, 1 - ldr r2, _08158218 @ =gBattlerPartyIndexes - adds r0, r2 - ldrh r0, [r0] - muls r0, r7 - add r0, r10 - bl BattleLoadOpponentMonSpriteGfx - ldrb r0, [r6] - bl GetBattlerSpriteDefault_Y - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldrb r0, [r6] - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, r8 - bl SetMultiuseSpriteTemplateToPokemon - ldr r0, _08158220 @ =gMultiuseSpriteTemplate - mov r9, r0 - ldrb r0, [r6] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r6] - bl GetBattlerSpriteSubpriority - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - mov r0, r9 - adds r1, r4, 0 - adds r2, r5, 0 - bl CreateSprite - ldr r4, _08158224 @ =gBattlerSpriteIds - ldrb r1, [r6] - adds r1, r4 - strb r0, [r1] - ldr r5, _08158228 @ =gSprites - ldrb r0, [r6] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _0815822C @ =0x0000ff10 - strh r1, [r0, 0x24] - ldrb r2, [r6] - adds r0, r2, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x2E] - ldrb r0, [r6] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - mov r1, r8 - strh r1, [r0, 0x32] - ldrb r3, [r6] - adds r0, r3, r4 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r2, [r6] - adds r4, r2, r4 - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08158230 @ =gBattleMonForms - adds r2, r1 - ldrb r1, [r2] - bl StartSpriteAnim - ldrb r4, [r6] - lsls r0, r4, 1 - ldr r2, _08158218 @ =gBattlerPartyIndexes - adds r0, r2 - ldrh r0, [r0] - muls r0, r7 - add r0, r10 - movs r1, 0xB - bl GetMonData - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl SetBattlerShadowSpriteCallback - ldr r1, _08158234 @ =gBattlerControllerFuncs - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158238 @ =sub_8156184 - str r1, [r0] - bl PlayerPartnerBufferExecCompleted - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08158214: .4byte gActiveBattler -_08158218: .4byte gBattlerPartyIndexes -_0815821C: .4byte gEnemyParty -_08158220: .4byte gMultiuseSpriteTemplate -_08158224: .4byte gBattlerSpriteIds -_08158228: .4byte gSprites -_0815822C: .4byte 0x0000ff10 -_08158230: .4byte gBattleMonForms -_08158234: .4byte gBattlerControllerFuncs -_08158238: .4byte sub_8156184 - thumb_func_end sub_81580E0 - - thumb_func_start sub_815823C -sub_815823C: @ 815823C - push {r4,r5,lr} - ldr r5, _081582A0 @ =gActiveBattler - ldrb r0, [r5] - ldr r4, _081582A4 @ =gBattleBufferA - lsls r1, r0, 9 - adds r2, r4, 0x2 - adds r1, r2 - ldrb r1, [r1] - bl ClearTemporarySpeciesSpriteData - ldr r2, _081582A8 @ =gBattlerPartyIndexes - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r2 - lsls r0, 9 - adds r4, 0x1 - adds r0, r4 - ldrb r0, [r0] - movs r4, 0 - strh r0, [r1] - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _081582AC @ =gPlayerParty - adds r0, r2 - bl BattleLoadPlayerMonSpriteGfx - ldr r1, _081582B0 @ =gActionSelectionCursor - ldrb r0, [r5] - adds r0, r1 - strb r4, [r0] - ldr r1, _081582B4 @ =gMoveSelectionCursor - ldrb r0, [r5] - adds r0, r1 - strb r4, [r0] - ldrb r0, [r5] - bl sub_8159478 - ldr r1, _081582B8 @ =gBattlerControllerFuncs - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _081582BC @ =sub_81563A8 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081582A0: .4byte gActiveBattler -_081582A4: .4byte gBattleBufferA -_081582A8: .4byte gBattlerPartyIndexes -_081582AC: .4byte gPlayerParty -_081582B0: .4byte gActionSelectionCursor -_081582B4: .4byte gMoveSelectionCursor -_081582B8: .4byte gBattlerControllerFuncs -_081582BC: .4byte sub_81563A8 - thumb_func_end sub_815823C - - thumb_func_start sub_81582C0 -sub_81582C0: @ 81582C0 - push {r4-r6,lr} - ldr r0, _081582EC @ =gBattleBufferA - ldr r6, _081582F0 @ =gActiveBattler - ldrb r2, [r6] - lsls r1, r2, 9 - adds r0, 0x1 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - bne _081582FC - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x1 - bl InitAndLaunchSpecialAnimation - ldr r0, _081582F4 @ =gBattlerControllerFuncs - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _081582F8 @ =sub_8156F7C - str r0, [r1] - b _08158332 - .align 2, 0 -_081582EC: .4byte gBattleBufferA -_081582F0: .4byte gActiveBattler -_081582F4: .4byte gBattlerControllerFuncs -_081582F8: .4byte sub_8156F7C -_081582FC: - ldr r5, _08158338 @ =gBattlerSpriteIds - adds r0, r2, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0815833C @ =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r1, _08158340 @ =gHealthboxSpriteIds - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - bl SetHealthboxSpriteInvisible - bl PlayerPartnerBufferExecCompleted -_08158332: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08158338: .4byte gBattlerSpriteIds -_0815833C: .4byte gSprites -_08158340: .4byte gHealthboxSpriteIds - thumb_func_end sub_81582C0 - - thumb_func_start sub_8158344 -sub_8158344: @ 8158344 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r7, _081583D8 @ =gActiveBattler - ldrb r0, [r7] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _081583F0 - ldrb r1, [r7] - movs r0, 0x4 - bl DecompressTrainerBackPalette - ldrb r0, [r7] - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x4 - bl SetMultiuseSpriteTemplateToTrainerBack - ldr r0, _081583DC @ =gMultiuseSpriteTemplate - ldr r1, _081583E0 @ =gTrainerBackPicCoords - ldrb r1, [r1, 0x10] - movs r2, 0x8 - subs r2, r1 - lsls r2, 18 - movs r1, 0xA0 - lsls r1, 15 - adds r2, r1 - asrs r2, 16 - movs r1, 0x50 - movs r3, 0x1E - bl CreateSprite - ldr r5, _081583E4 @ =gBattlerSpriteIds - ldrb r1, [r7] - adds r1, r5 - strb r0, [r1] - ldr r4, _081583E8 @ =gSprites - ldrb r0, [r7] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xF0 - strh r1, [r0, 0x24] - ldrb r0, [r7] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _081583EC @ =0x0000fffe - strh r1, [r0, 0x2E] - ldrb r3, [r7] - adds r0, r3, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - b _081584E2 - .align 2, 0 -_081583D8: .4byte gActiveBattler -_081583DC: .4byte gMultiuseSpriteTemplate -_081583E0: .4byte gTrainerBackPicCoords -_081583E4: .4byte gBattlerSpriteIds -_081583E8: .4byte gSprites -_081583EC: .4byte 0x0000fffe -_081583F0: - ldrb r1, [r7] - movs r0, 0x84 - bl DecompressTrainerFrontPic - ldrb r0, [r7] - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x84 - bl SetMultiuseSpriteTemplateToTrainerBack - ldr r5, _08158510 @ =gMultiuseSpriteTemplate - ldr r0, _08158514 @ =gTrainerFrontPicCoords - movs r1, 0x84 - mov r8, r1 - movs r1, 0x84 - lsls r1, 2 - adds r0, r1 - ldrb r0, [r0] - movs r4, 0x8 - subs r4, r0 - lsls r4, 18 - movs r0, 0xA0 - lsls r0, 14 - adds r4, r0 - asrs r4, 16 - ldrb r0, [r7] - bl GetBattlerSpriteSubpriority - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - adds r0, r5, 0 - movs r1, 0xB0 - adds r2, r4, 0 - bl CreateSprite - ldr r5, _08158518 @ =gBattlerSpriteIds - ldrb r1, [r7] - adds r1, r5 - strb r0, [r1] - ldr r4, _0815851C @ =gSprites - ldrb r0, [r7] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _08158520 @ =0x0000ff10 - strh r1, [r0, 0x24] - ldrb r0, [r7] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x2 - strh r1, [r0, 0x2E] - ldr r0, _08158524 @ =gTrainerFrontPicPaletteTable - mov r1, r8 - lsls r6, r1, 3 - adds r0, r6 - ldrh r0, [r0, 0x4] - bl IndexOfSpritePaletteTag - ldrb r1, [r7] - adds r1, r5 - ldrb r1, [r1] - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - adds r2, r4 - lsls r0, 4 - ldrb r3, [r2, 0x5] - movs r1, 0xF - ands r1, r3 - orrs r1, r0 - strb r1, [r2, 0x5] - ldrb r0, [r7] - adds r0, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x4] - lsls r0, 22 - lsrs r0, 22 - strh r0, [r1, 0x38] - ldr r0, _08158528 @ =gTrainerFrontPicTable - adds r0, r6 - ldrh r0, [r0, 0x6] - bl GetSpriteTileStartByTag - ldrb r1, [r7] - adds r1, r5 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldr r2, _0815852C @ =0x000003ff - ands r2, r0 - ldrh r3, [r1, 0x4] - ldr r0, _08158530 @ =0xfffffc00 - ands r0, r3 - orrs r0, r2 - strh r0, [r1, 0x4] - ldrb r0, [r7] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - mov r1, r8 - strh r1, [r0, 0x6] -_081584E2: - ldrb r0, [r7] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _08158534 @ =sub_8033EEC - str r1, [r0] - ldr r1, _08158538 @ =gBattlerControllerFuncs - ldr r0, _0815853C @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158540 @ =sub_815614C - str r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08158510: .4byte gMultiuseSpriteTemplate -_08158514: .4byte gTrainerFrontPicCoords -_08158518: .4byte gBattlerSpriteIds -_0815851C: .4byte gSprites -_08158520: .4byte 0x0000ff10 -_08158524: .4byte gTrainerFrontPicPaletteTable -_08158528: .4byte gTrainerFrontPicTable -_0815852C: .4byte 0x000003ff -_08158530: .4byte 0xfffffc00 -_08158534: .4byte sub_8033EEC -_08158538: .4byte gBattlerControllerFuncs -_0815853C: .4byte gActiveBattler -_08158540: .4byte sub_815614C - thumb_func_end sub_8158344 - - thumb_func_start sub_8158544 -sub_8158544: @ 8158544 - push {r4-r6,lr} - ldr r4, _081585EC @ =gActiveBattler - ldrb r1, [r4] - movs r0, 0x4 - bl DecompressTrainerBackPalette - ldrb r0, [r4] - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x4 - bl SetMultiuseSpriteTemplateToTrainerBack - ldr r0, _081585F0 @ =gMultiuseSpriteTemplate - ldr r1, _081585F4 @ =gTrainerBackPicCoords - ldrb r1, [r1, 0x10] - movs r2, 0x8 - subs r2, r1 - lsls r2, 18 - movs r1, 0xA0 - lsls r1, 15 - adds r2, r1 - asrs r2, 16 - movs r1, 0x50 - movs r3, 0x1E - bl CreateSprite - ldr r6, _081585F8 @ =gBattlerSpriteIds - ldrb r1, [r4] - adds r1, r6 - strb r0, [r1] - ldr r5, _081585FC @ =gSprites - ldrb r3, [r4] - adds r0, r3, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08158600 @ =0x0000ffa0 - strh r1, [r0, 0x24] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x2 - strh r1, [r0, 0x2E] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r5, 0x1C - adds r0, r5 - ldr r1, _08158604 @ =sub_8033EEC - str r1, [r0] - ldr r1, _08158608 @ =gBattlerControllerFuncs - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0815860C @ =sub_8156FEC - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081585EC: .4byte gActiveBattler -_081585F0: .4byte gMultiuseSpriteTemplate -_081585F4: .4byte gTrainerBackPicCoords -_081585F8: .4byte gBattlerSpriteIds -_081585FC: .4byte gSprites -_08158600: .4byte 0x0000ffa0 -_08158604: .4byte sub_8033EEC -_08158608: .4byte gBattlerControllerFuncs -_0815860C: .4byte sub_8156FEC - thumb_func_end sub_8158544 - - thumb_func_start sub_8158610 -sub_8158610: @ 8158610 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8158610 - - thumb_func_start sub_815861C -sub_815861C: @ 815861C - push {r4-r6,lr} - ldr r6, _08158668 @ =gBattleSpritesDataPtr - ldr r4, [r6] - ldr r5, _0815866C @ =gActiveBattler - ldrb r2, [r5] - ldr r0, [r4, 0x4] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 2 - adds r3, r1, r0 - ldrb r0, [r3, 0x4] - cmp r0, 0 - bne _08158670 - ldr r1, [r4] - lsls r0, r2, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08158650 - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl InitAndLaunchSpecialAnimation -_08158650: - ldr r0, [r6] - ldrb r1, [r5] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x4] - adds r1, 0x1 - strb r1, [r0, 0x4] - b _0815872A - .align 2, 0 -_08158668: .4byte gBattleSpritesDataPtr -_0815866C: .4byte gActiveBattler -_08158670: - ldrb r1, [r3] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0815872A - strb r0, [r3, 0x4] - ldrb r0, [r5] - bl GetBattlerSide - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _081586FC - ldr r2, _081586E8 @ =gBattlerPartyIndexes - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _081586EC @ =gPlayerParty - adds r0, r2 - bl HandleLowHpMusicChange - movs r1, 0x40 - negs r1, r1 - movs r0, 0x10 - bl PlaySE12WithPanning - ldr r2, _081586F0 @ =gSprites - ldr r3, _081586F4 @ =gBattlerSpriteIds - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r4, [r0, 0x30] - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x5 - strh r1, [r0, 0x32] - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _081586F8 @ =sub_8012110 - b _0815871A - .align 2, 0 -_081586E8: .4byte gBattlerPartyIndexes -_081586EC: .4byte gPlayerParty -_081586F0: .4byte gSprites -_081586F4: .4byte gBattlerSpriteIds -_081586F8: .4byte sub_8012110 -_081586FC: - movs r0, 0x10 - movs r1, 0x3F - bl PlaySE12WithPanning - ldr r2, _08158730 @ =gSprites - ldr r1, _08158734 @ =gBattlerSpriteIds - ldrb r0, [r5] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _08158738 @ =SpriteCB_FaintOpponentMon -_0815871A: - str r1, [r0] - ldr r1, _0815873C @ =gBattlerControllerFuncs - ldr r0, _08158740 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158744 @ =sub_8156DCC - str r1, [r0] -_0815872A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08158730: .4byte gSprites -_08158734: .4byte gBattlerSpriteIds -_08158738: .4byte SpriteCB_FaintOpponentMon -_0815873C: .4byte gBattlerControllerFuncs -_08158740: .4byte gActiveBattler -_08158744: .4byte sub_8156DCC - thumb_func_end sub_815861C - - thumb_func_start sub_8158748 -sub_8158748: @ 8158748 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8158748 - - thumb_func_start sub_8158754 -sub_8158754: @ 8158754 - push {r4,r5,lr} - ldr r0, _08158794 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0x8] - movs r0, 0x4 - strb r0, [r1, 0x8] - ldr r1, _08158798 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldr r5, _0815879C @ =gActiveBattler - ldrb r4, [r5] - movs r0, 0x1 - bl GetBattlerAtPosition - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x3 - bl InitAndLaunchSpecialAnimation - ldr r1, _081587A0 @ =gBattlerControllerFuncs - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _081587A4 @ =sub_8156484 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08158794: .4byte gBattleSpritesDataPtr -_08158798: .4byte gDoingBattleAnim -_0815879C: .4byte gActiveBattler -_081587A0: .4byte gBattlerControllerFuncs -_081587A4: .4byte sub_8156484 - thumb_func_end sub_8158754 - - thumb_func_start sub_81587A8 -sub_81587A8: @ 81587A8 - push {r4,r5,lr} - ldr r1, _081587F0 @ =gBattleBufferA - ldr r5, _081587F4 @ =gActiveBattler - ldrb r0, [r5] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r1, [r0] - ldr r0, _081587F8 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0x8] - strb r1, [r0, 0x8] - ldr r1, _081587FC @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldrb r4, [r5] - movs r0, 0x1 - bl GetBattlerAtPosition - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x3 - bl InitAndLaunchSpecialAnimation - ldr r1, _08158800 @ =gBattlerControllerFuncs - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158804 @ =sub_8156484 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081587F0: .4byte gBattleBufferA -_081587F4: .4byte gActiveBattler -_081587F8: .4byte gBattleSpritesDataPtr -_081587FC: .4byte gDoingBattleAnim -_08158800: .4byte gBattlerControllerFuncs -_08158804: .4byte sub_8156484 - thumb_func_end sub_81587A8 - - thumb_func_start sub_8158808 -sub_8158808: @ 8158808 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8158808 - - thumb_func_start sub_8158814 -sub_8158814: @ 8158814 - push {r4-r6,lr} - ldr r0, _081588E8 @ =gBattleBufferA - mov r12, r0 - ldr r6, _081588EC @ =gActiveBattler - ldrb r2, [r6] - lsls r2, 9 - adds r0, 0x1 - adds r0, r2, r0 - ldrb r0, [r0] - mov r1, r12 - adds r1, 0x2 - adds r1, r2, r1 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - ldr r5, _081588F0 @ =gAnimMoveTurn - mov r1, r12 - adds r1, 0x3 - adds r2, r1 - ldrb r1, [r2] - strb r1, [r5] - ldr r4, _081588F4 @ =gAnimMovePower - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0x4 - adds r1, r2, r1 - ldrb r3, [r1] - mov r1, r12 - adds r1, 0x5 - adds r2, r1 - ldrb r1, [r2] - lsls r1, 8 - orrs r3, r1 - strh r3, [r4] - ldr r4, _081588F8 @ =gAnimMoveDmg - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0x6 - adds r1, r2, r1 - ldrb r3, [r1] - mov r1, r12 - adds r1, 0x7 - adds r1, r2, r1 - ldrb r1, [r1] - lsls r1, 8 - orrs r3, r1 - mov r1, r12 - adds r1, 0x8 - adds r1, r2, r1 - ldrb r1, [r1] - lsls r1, 16 - orrs r3, r1 - mov r1, r12 - adds r1, 0x9 - adds r2, r1 - ldrb r1, [r2] - lsls r1, 24 - orrs r3, r1 - str r3, [r4] - ldr r3, _081588FC @ =gAnimFriendship - ldrb r1, [r6] - lsls r1, 9 - mov r2, r12 - adds r2, 0xA - adds r1, r2 - ldrb r1, [r1] - strb r1, [r3] - ldr r4, _08158900 @ =gWeatherMoveAnim - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0xC - adds r1, r2, r1 - ldrb r3, [r1] - mov r1, r12 - adds r1, 0xD - adds r2, r1 - ldrb r1, [r2] - lsls r1, 8 - orrs r3, r1 - strh r3, [r4] - ldr r3, _08158904 @ =gAnimDisableStructPtr - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0x10 - adds r2, r1 - str r2, [r3] - ldr r3, _08158908 @ =gTransformedPersonalities - ldrb r1, [r6] - lsls r1, 2 - adds r1, r3 - ldr r2, [r2] - str r2, [r1] - ldrb r1, [r5] - bl IsMoveWithoutAnimation - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _0815890C - bl PlayerPartnerBufferExecCompleted - b _0815892A - .align 2, 0 -_081588E8: .4byte gBattleBufferA -_081588EC: .4byte gActiveBattler -_081588F0: .4byte gAnimMoveTurn -_081588F4: .4byte gAnimMovePower -_081588F8: .4byte gAnimMoveDmg -_081588FC: .4byte gAnimFriendship -_08158900: .4byte gWeatherMoveAnim -_08158904: .4byte gAnimDisableStructPtr -_08158908: .4byte gTransformedPersonalities -_0815890C: - ldr r0, _08158930 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldrb r1, [r6] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strb r3, [r0, 0x4] - ldr r1, _08158934 @ =gBattlerControllerFuncs - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158938 @ =sub_815893C - str r1, [r0] -_0815892A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08158930: .4byte gBattleSpritesDataPtr -_08158934: .4byte gBattlerControllerFuncs -_08158938: .4byte sub_815893C - thumb_func_end sub_8158814 - - thumb_func_start sub_815893C -sub_815893C: @ 815893C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r2, _08158980 @ =gBattleBufferA - ldr r6, _08158984 @ =gActiveBattler - ldrb r3, [r6] - lsls r1, r3, 9 - adds r0, r2, 0x1 - mov r9, r0 - adds r0, r1, r0 - ldrb r4, [r0] - adds r2, 0x2 - mov r8, r2 - add r1, r8 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - ldr r7, _08158988 @ =gBattleSpritesDataPtr - ldr r5, [r7] - ldr r1, [r5, 0x4] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x4] - cmp r2, 0x1 - beq _081589C6 - cmp r2, 0x1 - bgt _0815898C - cmp r2, 0 - beq _08158996 - b _08158A7C - .align 2, 0 -_08158980: .4byte gBattleBufferA -_08158984: .4byte gActiveBattler -_08158988: .4byte gBattleSpritesDataPtr -_0815898C: - cmp r2, 0x2 - beq _081589F0 - cmp r2, 0x3 - beq _08158A40 - b _08158A7C -_08158996: - ldr r1, [r5] - lsls r0, r3, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _081589B2 - adds r0, r3, 0 - adds r1, r3, 0 - adds r2, r3, 0 - movs r3, 0x5 - bl InitAndLaunchSpecialAnimation -_081589B2: - ldr r0, [r7] - ldrb r1, [r6] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x1 - strb r1, [r0, 0x4] - b _08158A7C -_081589C6: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08158A7C - movs r0, 0 - bl sub_8035450 - adds r0, r4, 0 - bl DoMoveAnim - ldr r0, [r7] - ldrb r1, [r6] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2 - strb r1, [r0, 0x4] - b _08158A7C -_081589F0: - ldr r0, _08158A38 @ =gAnimScriptCallback - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _08158A3C @ =gAnimScriptActive - ldrb r0, [r0] - cmp r0, 0 - bne _08158A7C - movs r0, 0x1 - bl sub_8035450 - ldr r0, [r7] - ldrb r2, [r6] - ldr r1, [r0] - lsls r0, r2, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08158A24 - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x6 - bl InitAndLaunchSpecialAnimation -_08158A24: - ldr r0, [r7] - ldrb r1, [r6] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x3 - strb r1, [r0, 0x4] - b _08158A7C - .align 2, 0 -_08158A38: .4byte gAnimScriptCallback -_08158A3C: .4byte gAnimScriptActive -_08158A40: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08158A7C - bl CopyAllBattleSpritesInvisibilities - ldrb r0, [r6] - lsls r2, r0, 9 - mov r3, r9 - adds r1, r2, r3 - ldrb r1, [r1] - add r2, r8 - ldrb r2, [r2] - lsls r2, 8 - orrs r1, r2 - bl TrySetBehindSubstituteSpriteBit - ldr r0, [r7] - ldrb r1, [r6] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strb r4, [r0, 0x4] - bl PlayerPartnerBufferExecCompleted -_08158A7C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_815893C - - thumb_func_start sub_8158A88 -sub_8158A88: @ 8158A88 - push {r4,lr} - ldr r0, _08158ABC @ =gBattle_BG0_X - movs r1, 0 - strh r1, [r0] - ldr r0, _08158AC0 @ =gBattle_BG0_Y - strh r1, [r0] - ldr r0, _08158AC4 @ =gActiveBattler - ldrb r4, [r0] - lsls r4, 9 - ldr r0, _08158AC8 @ =gBattleBufferA + 2 - adds r4, r0 - ldrh r0, [r4] - bl BufferStringBattle - ldrh r0, [r4] - bl sub_80D89B0 - lsls r0, 24 - cmp r0, 0 - beq _08158AD0 - ldr r0, _08158ACC @ =gDisplayedStringBattle - movs r1, 0x40 - bl BattlePutTextOnWindow - b _08158AD8 - .align 2, 0 -_08158ABC: .4byte gBattle_BG0_X -_08158AC0: .4byte gBattle_BG0_Y -_08158AC4: .4byte gActiveBattler -_08158AC8: .4byte gBattleBufferA + 2 -_08158ACC: .4byte gDisplayedStringBattle -_08158AD0: - ldr r0, _08158AEC @ =gDisplayedStringBattle - movs r1, 0 - bl BattlePutTextOnWindow -_08158AD8: - ldr r1, _08158AF0 @ =gBattlerControllerFuncs - ldr r0, _08158AF4 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158AF8 @ =sub_815623C - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08158AEC: .4byte gDisplayedStringBattle -_08158AF0: .4byte gBattlerControllerFuncs -_08158AF4: .4byte gActiveBattler -_08158AF8: .4byte sub_815623C - thumb_func_end sub_8158A88 - - thumb_func_start sub_8158AFC -sub_8158AFC: @ 8158AFC - push {lr} - ldr r0, _08158B14 @ =gActiveBattler - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08158B18 - bl sub_8158A88 - b _08158B1C - .align 2, 0 -_08158B14: .4byte gActiveBattler -_08158B18: - bl PlayerPartnerBufferExecCompleted -_08158B1C: - pop {r0} - bx r0 - thumb_func_end sub_8158AFC - - thumb_func_start sub_8158B20 -sub_8158B20: @ 8158B20 - push {lr} - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08158B46 - ldr r0, _08158B4C @ =gBattle_BG0_X - strh r1, [r0] - ldr r1, _08158B50 @ =gBattle_BG0_Y - movs r0, 0xA0 - strh r0, [r1] - ldr r1, _08158B54 @ =gBattlerControllerFuncs - ldr r0, _08158B58 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158B5C @ =sub_8156140 - str r1, [r0] -_08158B46: - pop {r0} - bx r0 - .align 2, 0 -_08158B4C: .4byte gBattle_BG0_X -_08158B50: .4byte gBattle_BG0_Y -_08158B54: .4byte gBattlerControllerFuncs -_08158B58: .4byte gActiveBattler -_08158B5C: .4byte sub_8156140 - thumb_func_end sub_8158B20 - - thumb_func_start sub_8158B60 -sub_8158B60: @ 8158B60 - push {r4,lr} - ldr r4, _08158BBC @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08158BDC - ldr r1, _08158BC0 @ =gBattlerControllerFuncs - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158BC4 @ =sub_8158B20 - str r1, [r0] - ldr r0, _08158BC8 @ =gUnknown_83FDA4C - movs r1, 0 - bl BattlePutTextOnWindow - ldr r0, _08158BCC @ =gUnknown_83FE725 - movs r1, 0x2 - bl BattlePutTextOnWindow - movs r4, 0 -_08158B8E: - lsls r0, r4, 24 - lsrs r0, 24 - bl ActionSelectionDestroyCursorAt - adds r4, 0x1 - cmp r4, 0x3 - ble _08158B8E - ldr r1, _08158BD0 @ =gActionSelectionCursor - ldr r0, _08158BBC @ =gActiveBattler - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - bl ActionSelectionCreateCursorAt - ldr r0, _08158BD4 @ =gText_WhatWillPkmnDo - bl BattleStringExpandPlaceholdersToDisplayedString - ldr r0, _08158BD8 @ =gDisplayedStringBattle - movs r1, 0x1 - bl BattlePutTextOnWindow - b _08158BE8 - .align 2, 0 -_08158BBC: .4byte gActiveBattler -_08158BC0: .4byte gBattlerControllerFuncs -_08158BC4: .4byte sub_8158B20 -_08158BC8: .4byte gUnknown_83FDA4C -_08158BCC: .4byte gUnknown_83FE725 -_08158BD0: .4byte gActionSelectionCursor -_08158BD4: .4byte gText_WhatWillPkmnDo -_08158BD8: .4byte gDisplayedStringBattle -_08158BDC: - ldr r0, _08158BF0 @ =gBattlerControllerFuncs - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _08158BF4 @ =sub_8156140 - str r0, [r1] -_08158BE8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08158BF0: .4byte gBattlerControllerFuncs -_08158BF4: .4byte sub_8156140 - thumb_func_end sub_8158B60 - - thumb_func_start sub_8158BF8 -sub_8158BF8: @ 8158BF8 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8158BF8 - - thumb_func_start sub_8158C04 -sub_8158C04: @ 8158C04 - push {lr} - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08158C2E - ldr r0, _08158C34 @ =gBattle_BG0_X - strh r1, [r0] - ldr r1, _08158C38 @ =gBattle_BG0_Y - movs r2, 0xA0 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08158C3C @ =gBattlerControllerFuncs - ldr r0, _08158C40 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158C44 @ =sub_81564E4 - str r1, [r0] -_08158C2E: - pop {r0} - bx r0 - .align 2, 0 -_08158C34: .4byte gBattle_BG0_X -_08158C38: .4byte gBattle_BG0_Y -_08158C3C: .4byte gBattlerControllerFuncs -_08158C40: .4byte gActiveBattler -_08158C44: .4byte sub_81564E4 - thumb_func_end sub_8158C04 - - thumb_func_start sub_8158C48 -sub_8158C48: @ 8158C48 - push {r4,lr} - ldr r4, _08158C68 @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08158C74 - bl InitMoveSelectionsVarsAndStrings - ldr r0, _08158C6C @ =gBattlerControllerFuncs - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _08158C70 @ =sub_8158C04 - b _08158C7E - .align 2, 0 -_08158C68: .4byte gActiveBattler -_08158C6C: .4byte gBattlerControllerFuncs -_08158C70: .4byte sub_8158C04 -_08158C74: - ldr r0, _08158C88 @ =gBattlerControllerFuncs - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _08158C8C @ =sub_81564E4 -_08158C7E: - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08158C88: .4byte gBattlerControllerFuncs -_08158C8C: .4byte sub_81564E4 - thumb_func_end sub_8158C48 - - thumb_func_start sub_8158C90 -sub_8158C90: @ 8158C90 - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08158CDC @ =gBattlerControllerFuncs - ldr r2, _08158CE0 @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158CE4 @ =sub_8156594 - str r1, [r0] - ldr r1, _08158CE8 @ =gBattlerInMenuId - ldrb r0, [r2] - strb r0, [r1] - movs r3, 0 - ldr r5, _08158CEC @ =gUnknown_203B0DC - ldr r4, _08158CF0 @ =gBattleBufferA -_08158CBE: - adds r0, r3, r5 - ldrb r1, [r2] - lsls r1, 9 - adds r1, 0x1 - adds r1, r3, r1 - adds r1, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x2 - ble _08158CBE - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08158CDC: .4byte gBattlerControllerFuncs -_08158CE0: .4byte gActiveBattler -_08158CE4: .4byte sub_8156594 -_08158CE8: .4byte gBattlerInMenuId -_08158CEC: .4byte gUnknown_203B0DC -_08158CF0: .4byte gBattleBufferA - thumb_func_end sub_8158C90 - - thumb_func_start sub_8158CF4 -sub_8158CF4: @ 8158CF4 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _08158DA4 @ =TaskDummy - movs r1, 0xFF - bl CreateTask - ldr r3, _08158DA8 @ =gUnknown_3004FFC - ldr r4, _08158DAC @ =gActiveBattler - ldrb r1, [r4] - adds r1, r3 - strb r0, [r1] - ldr r5, _08158DB0 @ =gTasks - ldrb r2, [r4] - adds r3, r2, r3 - ldrb r0, [r3] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r5 - ldr r5, _08158DB4 @ =gBattleBufferA - lsls r2, 9 - adds r6, r5, 0x1 - adds r2, r6 - ldrb r2, [r2] - movs r0, 0xF - ands r0, r2 - strh r0, [r1, 0x8] - ldr r3, _08158DB8 @ =gBattleStruct - ldr r1, [r3] - adds r1, 0x49 - ldrb r0, [r4] - lsls r0, 9 - adds r0, r6 - ldrb r0, [r0] - lsrs r0, 4 - strb r0, [r1] - ldr r2, [r3] - adds r2, 0x8B - ldrb r0, [r4] - lsls r0, 9 - adds r1, r5, 0x2 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldr r2, [r3] - adds r2, 0xAC - ldrb r0, [r4] - lsls r0, 9 - adds r1, r5, 0x3 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - movs r2, 0 - ldr r3, _08158DBC @ =gUnknown_203B0DC -_08158D60: - adds r0, r2, r3 - ldrb r1, [r4] - lsls r1, 9 - adds r1, 0x4 - adds r1, r2, r1 - adds r1, r5 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _08158D60 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08158DC0 @ =gBattlerControllerFuncs - ldr r2, _08158DAC @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158DC4 @ =sub_81564F0 - str r1, [r0] - ldr r1, _08158DC8 @ =gBattlerInMenuId - ldrb r0, [r2] - strb r0, [r1] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08158DA4: .4byte TaskDummy -_08158DA8: .4byte gUnknown_3004FFC -_08158DAC: .4byte gActiveBattler -_08158DB0: .4byte gTasks -_08158DB4: .4byte gBattleBufferA -_08158DB8: .4byte gBattleStruct -_08158DBC: .4byte gUnknown_203B0DC -_08158DC0: .4byte gBattlerControllerFuncs -_08158DC4: .4byte sub_81564F0 -_08158DC8: .4byte gBattlerInMenuId - thumb_func_end sub_8158CF4 - - thumb_func_start sub_8158DCC -sub_8158DCC: @ 8158DCC - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8158DCC - - thumb_func_start sub_8158DD8 -sub_8158DD8: @ 8158DD8 - push {r4-r7,lr} - sub sp, 0x4 - ldr r4, _08158DFC @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08158E08 - ldr r1, _08158E00 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08158E04 @ =gPlayerParty - b _08158E18 - .align 2, 0 -_08158DFC: .4byte gActiveBattler -_08158E00: .4byte gBattlerPartyIndexes -_08158E04: .4byte gPlayerParty -_08158E08: - ldr r1, _08158E68 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08158E6C @ =gEnemyParty -_08158E18: - adds r5, r1, r0 - movs r0, 0 - bl LoadBattleBarGfx - ldr r3, _08158E70 @ =gBattleBufferA - ldr r7, _08158E74 @ =gActiveBattler - ldrb r1, [r7] - lsls r1, 9 - adds r0, r3, 0x2 - adds r0, r1, r0 - ldrb r2, [r0] - adds r3, 0x3 - adds r1, r3 - ldrb r0, [r1] - lsls r0, 8 - orrs r2, r0 - lsls r2, 16 - asrs r6, r2, 16 - ldr r0, _08158E78 @ =0x00007fff - cmp r6, r0 - beq _08158E80 - adds r0, r5, 0 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - ldrb r0, [r7] - ldr r1, _08158E7C @ =gHealthboxSpriteIds - adds r1, r0, r1 - ldrb r1, [r1] - str r6, [sp] - adds r2, r4, 0 - bl SetBattleBarStruct - b _08158EA8 - .align 2, 0 -_08158E68: .4byte gBattlerPartyIndexes -_08158E6C: .4byte gEnemyParty -_08158E70: .4byte gBattleBufferA -_08158E74: .4byte gActiveBattler -_08158E78: .4byte 0x00007fff -_08158E7C: .4byte gHealthboxSpriteIds -_08158E80: - adds r0, r5, 0 - movs r1, 0x3A - bl GetMonData - adds r2, r0, 0 - ldrb r0, [r7] - ldr r4, _08158EC0 @ =gHealthboxSpriteIds - adds r1, r0, r4 - ldrb r1, [r1] - str r6, [sp] - movs r3, 0 - bl SetBattleBarStruct - ldrb r0, [r7] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0 - movs r2, 0 - bl UpdateHpTextInHealthbox -_08158EA8: - ldr r1, _08158EC4 @ =gBattlerControllerFuncs - ldr r0, _08158EC8 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158ECC @ =sub_8156E78 - str r1, [r0] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08158EC0: .4byte gHealthboxSpriteIds -_08158EC4: .4byte gBattlerControllerFuncs -_08158EC8: .4byte gActiveBattler -_08158ECC: .4byte sub_8156E78 - thumb_func_end sub_8158DD8 - - thumb_func_start sub_8158ED0 -sub_8158ED0: @ 8158ED0 - push {r4-r7,lr} - ldr r5, _08158EFC @ =gBattleBufferA - ldr r6, _08158F00 @ =gActiveBattler - ldrb r0, [r6] - lsls r0, 9 - adds r1, r5, 0x1 - adds r0, r1 - ldrb r7, [r0] - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _08158F04 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - cmp r0, 0x63 - bls _08158F08 - bl PlayerPartnerBufferExecCompleted - b _08158F54 - .align 2, 0 -_08158EFC: .4byte gBattleBufferA -_08158F00: .4byte gActiveBattler -_08158F04: .4byte gPlayerParty -_08158F08: - movs r0, 0x1 - bl LoadBattleBarGfx - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - ldrb r1, [r6] - lsls r1, 9 - adds r0, r5, 0x2 - adds r0, r1, r0 - ldrb r4, [r0] - adds r0, r5, 0x3 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - ldr r0, _08158F5C @ =sub_81568DC - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08158F60 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r7, [r1, 0x8] - strh r4, [r1, 0xA] - ldrb r0, [r6] - strh r0, [r1, 0xC] - ldr r1, _08158F64 @ =gBattlerControllerFuncs - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _08158F68 @ =nullsub_99 - str r1, [r0] -_08158F54: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08158F5C: .4byte sub_81568DC -_08158F60: .4byte gTasks -_08158F64: .4byte gBattlerControllerFuncs -_08158F68: .4byte nullsub_99 - thumb_func_end sub_8158ED0 - - thumb_func_start sub_8158F6C -sub_8158F6C: @ 8158F6C - push {r4,lr} - ldr r4, _08158F9C @ =gActiveBattler - ldrb r0, [r4] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - bne _08158FF2 - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08158FA8 - ldr r1, _08158FA0 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08158FA4 @ =gPlayerParty - b _08158FB8 - .align 2, 0 -_08158F9C: .4byte gActiveBattler -_08158FA0: .4byte gBattlerPartyIndexes -_08158FA4: .4byte gPlayerParty -_08158FA8: - ldr r1, _08158FF8 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08158FFC @ =gEnemyParty -_08158FB8: - adds r2, r1, r0 - ldr r1, _08159000 @ =gHealthboxSpriteIds - ldr r4, _08159004 @ =gActiveBattler - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - adds r1, r2, 0 - movs r2, 0x9 - bl UpdateHealthboxAttribute - ldrb r2, [r4] - ldr r0, _08159008 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0, 0x4] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0x11 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r1, _0815900C @ =gBattlerControllerFuncs - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _08159010 @ =sub_8157054 - str r1, [r0] -_08158FF2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08158FF8: .4byte gBattlerPartyIndexes -_08158FFC: .4byte gEnemyParty -_08159000: .4byte gHealthboxSpriteIds -_08159004: .4byte gActiveBattler -_08159008: .4byte gBattleSpritesDataPtr -_0815900C: .4byte gBattlerControllerFuncs -_08159010: .4byte sub_8157054 - thumb_func_end sub_8158F6C - - thumb_func_start sub_8159014 -sub_8159014: @ 8159014 - push {r4,r5,lr} - ldr r5, _0815906C @ =gActiveBattler - ldrb r0, [r5] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - bne _08159064 - ldr r4, _08159070 @ =gBattleBufferA - ldrb r3, [r5] - lsls r3, 9 - adds r0, r4, 0x1 - adds r0, r3, r0 - ldrb r0, [r0] - adds r1, r4, 0x2 - adds r1, r3, r1 - ldrb r1, [r1] - adds r2, r4, 0x3 - adds r2, r3, r2 - ldrb r2, [r2] - lsls r2, 8 - orrs r1, r2 - adds r2, r4, 0x4 - adds r2, r3, r2 - ldrb r2, [r2] - lsls r2, 16 - orrs r1, r2 - adds r4, 0x5 - adds r3, r4 - ldrb r2, [r3] - lsls r2, 24 - orrs r1, r2 - bl InitAndLaunchChosenStatusAnimation - ldr r1, _08159074 @ =gBattlerControllerFuncs - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08159078 @ =sub_8157054 - str r1, [r0] -_08159064: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0815906C: .4byte gActiveBattler -_08159070: .4byte gBattleBufferA -_08159074: .4byte gBattlerControllerFuncs -_08159078: .4byte sub_8157054 - thumb_func_end sub_8159014 - - thumb_func_start sub_815907C -sub_815907C: @ 815907C - push {r4,lr} - sub sp, 0x4 - ldr r4, _081590A0 @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _081590AC - ldr r1, _081590A4 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _081590A8 @ =gPlayerParty - b _081590BC - .align 2, 0 -_081590A0: .4byte gActiveBattler -_081590A4: .4byte gBattlerPartyIndexes -_081590A8: .4byte gPlayerParty -_081590AC: - ldr r1, _081590F0 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _081590F4 @ =gEnemyParty -_081590BC: - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - ldr r2, _081590F8 @ =gBattleBufferA - ldr r1, _081590FC @ =gActiveBattler - ldrb r1, [r1] - lsls r1, 9 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - eors r0, r1 - mov r1, sp - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x37 - mov r2, sp - bl SetMonData - bl PlayerPartnerBufferExecCompleted - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081590F0: .4byte gBattlerPartyIndexes -_081590F4: .4byte gEnemyParty -_081590F8: .4byte gBattleBufferA -_081590FC: .4byte gActiveBattler - thumb_func_end sub_815907C - - thumb_func_start sub_8159100 -sub_8159100: @ 8159100 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159100 - - thumb_func_start sub_815910C -sub_815910C: @ 815910C - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_815910C - - thumb_func_start sub_8159118 -sub_8159118: @ 8159118 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159118 - - thumb_func_start sub_8159124 -sub_8159124: @ 8159124 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159124 - - thumb_func_start sub_8159130 -sub_8159130: @ 8159130 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159130 - - thumb_func_start sub_815913C -sub_815913C: @ 815913C - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_815913C - - thumb_func_start sub_8159148 -sub_8159148: @ 8159148 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159148 - - thumb_func_start sub_8159154 -sub_8159154: @ 8159154 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159154 - - thumb_func_start sub_8159160 -sub_8159160: @ 8159160 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159160 - - thumb_func_start sub_815916C -sub_815916C: @ 815916C - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_815916C - - thumb_func_start sub_8159178 -sub_8159178: @ 8159178 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159178 - - thumb_func_start sub_8159184 -sub_8159184: @ 8159184 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159184 - - thumb_func_start sub_8159190 -sub_8159190: @ 8159190 - push {r4,lr} - ldr r3, _081591B8 @ =gSprites - ldr r2, _081591BC @ =gBattlerSpriteIds - ldr r4, _081591C0 @ =gActiveBattler - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 29 - cmp r0, 0 - bge _081591C4 - bl PlayerPartnerBufferExecCompleted - b _081591EE - .align 2, 0 -_081591B8: .4byte gSprites -_081591BC: .4byte gBattlerSpriteIds -_081591C0: .4byte gActiveBattler -_081591C4: - ldr r1, _081591F4 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0 - strh r1, [r0, 0x30] - ldrb r0, [r4] - bl DoHitAnimHealthboxEffect - ldr r1, _081591F8 @ =gBattlerControllerFuncs - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _081591FC @ =sub_8156F00 - str r1, [r0] -_081591EE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081591F4: .4byte gDoingBattleAnim -_081591F8: .4byte gBattlerControllerFuncs -_081591FC: .4byte sub_8156F00 - thumb_func_end sub_8159190 - - thumb_func_start sub_8159200 -sub_8159200: @ 8159200 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159200 - - thumb_func_start sub_815920C -sub_815920C: @ 815920C - push {lr} - ldr r2, _08159234 @ =gBattleBufferA - ldr r0, _08159238 @ =gActiveBattler - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlaySE - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08159234: .4byte gBattleBufferA -_08159238: .4byte gActiveBattler - thumb_func_end sub_815920C - - thumb_func_start sub_815923C -sub_815923C: @ 815923C - push {lr} - ldr r2, _08159264 @ =gBattleBufferA - ldr r0, _08159268 @ =gActiveBattler - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlayFanfare - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08159264: .4byte gBattleBufferA -_08159268: .4byte gActiveBattler - thumb_func_end sub_815923C - - thumb_func_start sub_815926C -sub_815926C: @ 815926C - push {r4,lr} - ldr r4, _08159290 @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0815929C - ldr r1, _08159294 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _08159298 @ =gPlayerParty - b _081592AC - .align 2, 0 -_08159290: .4byte gActiveBattler -_08159294: .4byte gBattlerPartyIndexes -_08159298: .4byte gPlayerParty -_0815929C: - ldr r1, _081592C8 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _081592CC @ =gEnemyParty -_081592AC: - adds r0, r1, r0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x19 - bl PlayCry1 - bl PlayerPartnerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081592C8: .4byte gBattlerPartyIndexes -_081592CC: .4byte gEnemyParty - thumb_func_end sub_815926C - - thumb_func_start sub_81592D0 -sub_81592D0: @ 81592D0 - push {lr} - ldr r1, _081592F8 @ =gBattleBufferA - ldr r0, _081592FC @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - bl HandleIntroSlide - ldr r2, _08159300 @ =gIntroSlideFlags - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_081592F8: .4byte gBattleBufferA -_081592FC: .4byte gActiveBattler -_08159300: .4byte gIntroSlideFlags - thumb_func_end sub_81592D0 - - thumb_func_start sub_8159304 -sub_8159304: @ 8159304 - push {r4-r7,lr} - ldr r6, _0815943C @ =gBattlerSpriteIds - ldr r7, _08159440 @ =gActiveBattler - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, _08159444 @ =gSprites - adds r0, r5 - bl SetSpritePrimaryCoordsFromSecondaryCoords - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x32 - strh r1, [r0, 0x2E] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08159448 @ =0x0000ffd8 - strh r1, [r0, 0x32] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x22] - strh r1, [r0, 0x36] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _0815944C @ =StartAnimLinearTranslation - str r1, [r0] - ldrb r2, [r7] - adds r0, r2, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x38] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08159450 @ =sub_80335F8 - bl StoreSpriteCallbackInData6 - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, _08159454 @ =0x0000d6f8 - bl AllocSpritePalette - adds r4, r0, 0 - lsls r4, 24 - ldr r0, _08159458 @ =gTrainerBackPicPaletteTable - ldr r0, [r0, 0x20] - lsrs r4, 20 - movs r2, 0x80 - lsls r2, 1 - adds r1, r4, r2 - movs r2, 0x20 - bl LoadCompressedPalette - ldrb r0, [r7] - adds r0, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r4 - strb r0, [r1, 0x5] - ldr r0, _0815945C @ =sub_81595EC - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08159460 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r4 - ldrb r0, [r7] - strh r0, [r1, 0x8] - ldr r3, _08159464 @ =gBattleSpritesDataPtr - ldr r0, [r3] - ldrb r2, [r7] - ldr r1, [r0, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0815941C - ldr r0, _08159468 @ =gBattlerStatusSummaryTaskId - adds r0, r2, r0 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - ldr r1, _0815946C @ =Task_HidePartyStatusSummary - str r1, [r0] -_0815941C: - ldr r0, [r3] - ldr r2, [r0, 0x8] - ldrb r0, [r2, 0x9] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x9] - ldr r1, _08159470 @ =gBattlerControllerFuncs - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - ldr r1, _08159474 @ =nullsub_99 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815943C: .4byte gBattlerSpriteIds -_08159440: .4byte gActiveBattler -_08159444: .4byte gSprites -_08159448: .4byte 0x0000ffd8 -_0815944C: .4byte StartAnimLinearTranslation -_08159450: .4byte sub_80335F8 -_08159454: .4byte 0x0000d6f8 -_08159458: .4byte gTrainerBackPicPaletteTable -_0815945C: .4byte sub_81595EC -_08159460: .4byte gTasks -_08159464: .4byte gBattleSpritesDataPtr -_08159468: .4byte gBattlerStatusSummaryTaskId -_0815946C: .4byte Task_HidePartyStatusSummary -_08159470: .4byte gBattlerControllerFuncs -_08159474: .4byte nullsub_99 - thumb_func_end sub_8159304 - - thumb_func_start sub_8159478 -sub_8159478: @ 8159478 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _081595C0 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r6, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x2] - ldr r0, _081595C4 @ =gBattlerPartyIndexes - lsls r2, r6, 1 - adds r2, r0 - ldr r0, _081595C8 @ =gBattleBufferA - lsls r1, r6, 9 - adds r0, 0x1 - adds r1, r0 - ldrb r0, [r1] - strh r0, [r2] - ldrh r1, [r2] - movs r0, 0x64 - muls r0, r1 - ldr r1, _081595CC @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - mov r8, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r0, _081595D0 @ =sub_8033E3C - bl CreateInvisibleSpriteWithCallback - ldr r1, _081595D4 @ =gUnknown_3004FFC - mov r9, r1 - add r9, r6 - mov r1, r9 - strb r0, [r1] - adds r0, r6, 0 - bl GetBattlerPosition - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, r8 - bl SetMultiuseSpriteTemplateToPokemon - ldr r0, _081595D8 @ =gMultiuseSpriteTemplate - mov r10, r0 - adds r0, r6, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r0, r6, 0 - bl GetBattlerSpriteDefault_Y - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - bl GetBattlerSpriteSubpriority - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - mov r0, r10 - adds r1, r5, 0 - adds r2, r4, 0 - bl CreateSprite - ldr r4, _081595DC @ =gBattlerSpriteIds - adds r4, r6, r4 - strb r0, [r4] - ldr r5, _081595E0 @ =gSprites - mov r0, r9 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r4] - strh r1, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r6, [r0, 0x2E] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - mov r1, r8 - strh r1, [r0, 0x32] - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - lsls r3, r6, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _081595E4 @ =gBattleMonForms - adds r6, r1 - ldrb r1, [r6] - bl StartSpriteAnim - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _081595E8 @ =SpriteCallbackDummy - str r1, [r0] - movs r0, 0 - movs r1, 0xFF - bl DoPokeballSendOutAnimation - mov r1, r9 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r5 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x2E] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081595C0: .4byte gBattleSpritesDataPtr -_081595C4: .4byte gBattlerPartyIndexes -_081595C8: .4byte gBattleBufferA -_081595CC: .4byte gPlayerParty -_081595D0: .4byte sub_8033E3C -_081595D4: .4byte gUnknown_3004FFC -_081595D8: .4byte gMultiuseSpriteTemplate -_081595DC: .4byte gBattlerSpriteIds -_081595E0: .4byte gSprites -_081595E4: .4byte gBattleMonForms -_081595E8: .4byte SpriteCallbackDummy - thumb_func_end sub_8159478 - - thumb_func_start sub_81595EC -sub_81595EC: @ 81595EC - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0815960C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0xA] - movs r3, 0xA - ldrsh r0, [r1, r3] - cmp r0, 0x1E - bgt _08159610 - adds r0, r2, 0x1 - strh r0, [r1, 0xA] - b _08159646 - .align 2, 0 -_0815960C: .4byte gTasks -_08159610: - ldr r4, _0815964C @ =gActiveBattler - ldrb r5, [r4] - ldrh r0, [r1, 0x8] - strb r0, [r4] - ldr r0, _08159650 @ =gBattleBufferA - ldrb r1, [r4] - lsls r2, r1, 9 - adds r0, 0x1 - adds r2, r0 - ldr r0, _08159654 @ =gBattlerPartyIndexes - lsls r1, 1 - adds r1, r0 - ldrh r0, [r1] - strb r0, [r2] - ldrb r0, [r4] - bl sub_8159478 - ldr r1, _08159658 @ =gBattlerControllerFuncs - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0815965C @ =sub_8156624 - str r1, [r0] - strb r5, [r4] - adds r0, r6, 0 - bl DestroyTask -_08159646: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815964C: .4byte gActiveBattler -_08159650: .4byte gBattleBufferA -_08159654: .4byte gBattlerPartyIndexes -_08159658: .4byte gBattlerControllerFuncs -_0815965C: .4byte sub_8156624 - thumb_func_end sub_81595EC - - thumb_func_start sub_8159660 -sub_8159660: @ 8159660 - push {r4,r5,lr} - ldr r1, _08159688 @ =gBattleBufferA - ldr r0, _0815968C @ =gActiveBattler - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08159690 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08159690 - bl PlayerPartnerBufferExecCompleted - b _081596CE - .align 2, 0 -_08159688: .4byte gBattleBufferA -_0815968C: .4byte gActiveBattler -_08159690: - ldr r0, _081596D4 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r5, _081596D8 @ =gActiveBattler - ldrb r1, [r5] - ldr r2, [r0, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - ldrb r0, [r5] - lsls r4, r0, 9 - ldr r3, _081596DC @ =gBattleBufferA + 4 - adds r1, r4, r3 - subs r2, r3, 0x3 - adds r2, r4, r2 - ldrb r2, [r2] - subs r3, 0x2 - adds r4, r3 - ldrb r3, [r4] - bl CreatePartyStatusSummarySprites - ldr r2, _081596E0 @ =gBattlerStatusSummaryTaskId - ldrb r1, [r5] - adds r1, r2 - strb r0, [r1] - bl PlayerPartnerBufferExecCompleted -_081596CE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081596D4: .4byte gBattleSpritesDataPtr -_081596D8: .4byte gActiveBattler -_081596DC: .4byte gBattleBufferA + 4 -_081596E0: .4byte gBattlerStatusSummaryTaskId - thumb_func_end sub_8159660 - - thumb_func_start sub_81596E4 -sub_81596E4: @ 81596E4 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_81596E4 - - thumb_func_start sub_81596F0 -sub_81596F0: @ 81596F0 - push {r4,lr} - ldr r4, _08159710 @ =gActiveBattler - ldrb r0, [r4] - movs r1, 0x1 - bl EndBounceEffect - ldrb r0, [r4] - movs r1, 0 - bl EndBounceEffect - bl PlayerPartnerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08159710: .4byte gActiveBattler - thumb_func_end sub_81596F0 - - thumb_func_start sub_8159714 -sub_8159714: @ 8159714 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8159714 - - thumb_func_start sub_8159720 -sub_8159720: @ 8159720 - push {r4-r6,lr} - sub sp, 0x4 - ldr r5, _08159758 @ =gBattleBufferA - ldr r6, _0815975C @ =gActiveBattler - ldrb r2, [r6] - lsls r1, r2, 9 - adds r0, r5, 0x1 - adds r0, r1, r0 - ldrb r3, [r0] - adds r0, r5, 0x2 - adds r0, r1, r0 - ldrb r4, [r0] - adds r5, 0x3 - adds r1, r5 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - str r4, [sp] - adds r0, r2, 0 - adds r1, r2, 0 - bl TryHandleLaunchBattleTableAnimation - lsls r0, 24 - cmp r0, 0 - beq _08159760 - bl PlayerPartnerBufferExecCompleted - b _0815976C - .align 2, 0 -_08159758: .4byte gBattleBufferA -_0815975C: .4byte gActiveBattler -_08159760: - ldr r0, _08159774 @ =gBattlerControllerFuncs - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _08159778 @ =sub_8157024 - str r0, [r1] -_0815976C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08159774: .4byte gBattlerControllerFuncs -_08159778: .4byte sub_8157024 - thumb_func_end sub_8159720 - - thumb_func_start sub_815977C -sub_815977C: @ 815977C - push {r4,lr} - ldr r1, _081597B0 @ =gBattleBufferA - ldr r4, _081597B4 @ =gActiveBattler - ldrb r2, [r4] - lsls r0, r2, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - blt _081597A4 - cmp r0, 0x1 - bgt _081597A4 - adds r0, r2, 0 - movs r1, 0x1 - bl EndBounceEffect - ldrb r0, [r4] - movs r1, 0 - bl EndBounceEffect -_081597A4: - bl PlayerPartnerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081597B0: .4byte gBattleBufferA -_081597B4: .4byte gActiveBattler - thumb_func_end sub_815977C - - thumb_func_start sub_81597B8 -sub_81597B8: @ 81597B8 - push {lr} - bl PlayerPartnerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_81597B8 - - thumb_func_start sub_81597C4 -sub_81597C4: @ 81597C4 - push {r4,lr} - ldr r2, _08159808 @ =gBattleOutcome - ldr r1, _0815980C @ =gBattleBufferA - ldr r4, _08159810 @ =gActiveBattler - ldrb r0, [r4] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0x5 - bl FadeOutMapMusic - movs r0, 0x3 - bl BeginFastPaletteFade - bl PlayerPartnerBufferExecCompleted - ldr r0, _08159814 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x6 - ands r0, r1 - cmp r0, 0x2 - bne _08159800 - ldr r0, _08159818 @ =gBattlerControllerFuncs - ldrb r1, [r4] - lsls r1, 2 - adds r1, r0 - ldr r0, _0815981C @ =sub_8156254 - str r0, [r1] -_08159800: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08159808: .4byte gBattleOutcome -_0815980C: .4byte gBattleBufferA -_08159810: .4byte gActiveBattler -_08159814: .4byte gBattleTypeFlags -_08159818: .4byte gBattlerControllerFuncs -_0815981C: .4byte sub_8156254 - thumb_func_end sub_81597C4 - - thumb_func_start nullsub_100 -nullsub_100: @ 8159820 - bx lr - thumb_func_end nullsub_100 - - thumb_func_start sub_8159824 -sub_8159824: @ 8159824 - push {r4-r7,lr} - ldr r1, _081598B4 @ =gUnknown_8479060 - ldr r0, _081598B8 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x96 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r7, [r0] - ldr r4, _081598BC @ =gActiveBattler - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0815985C - ldrb r0, [r4] - movs r1, 0x1 - movs r2, 0x7 - movs r3, 0x1 - bl DoBounceEffect - ldrb r0, [r4] - movs r1, 0 - movs r2, 0x7 - movs r3, 0x1 - bl DoBounceEffect -_0815985C: - ldr r6, _081598C0 @ =gUnknown_3005EE0 - ldrb r2, [r4] - lsls r0, r2, 2 - adds r0, r6 - ldr r1, [r0] - ldrb r0, [r1] - lsls r0, 3 - adds r0, r7 - adds r3, r0, r2 - ldrb r0, [r3, 0x4] - ldrb r1, [r1, 0x2] - cmp r0, r1 - bne _0815992C - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08159888 - movs r0, 0x5 - bl PlaySE -_08159888: - ldrb r0, [r4] - lsls r0, 2 - adds r0, r6 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x2] - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 3 - adds r0, r7 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _081598D4 - cmp r0, 0x1 - bgt _081598C4 - cmp r0, 0 - beq _081598CE - b _081598F0 - .align 2, 0 -_081598B4: .4byte gUnknown_8479060 -_081598B8: .4byte gBattleStruct -_081598BC: .4byte gActiveBattler -_081598C0: .4byte gUnknown_3005EE0 -_081598C4: - cmp r0, 0x2 - beq _081598DA - cmp r0, 0x3 - beq _081598E6 - b _081598F0 -_081598CE: - movs r0, 0x1 - movs r1, 0 - b _081598DE -_081598D4: - movs r0, 0x1 - movs r1, 0x1 - b _081598DE -_081598DA: - movs r0, 0x1 - movs r1, 0x2 -_081598DE: - movs r2, 0 - bl BtlController_EmitTwoReturnValues - b _081598F0 -_081598E6: - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl BtlController_EmitTwoReturnValues -_081598F0: - bl PlayerPartnerBufferExecCompleted - ldr r3, _08159924 @ =gUnknown_3005EE0 - ldr r2, _08159928 @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 2 - adds r0, r3 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldrb r1, [r2] - lsls r0, r1, 2 - adds r0, r3 - ldr r2, [r0] - ldrb r0, [r2] - lsls r0, 3 - adds r0, r7 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x4 - bne _08159984 - movs r0, 0 - strb r0, [r2] - b _08159984 - .align 2, 0 -_08159924: .4byte gUnknown_3005EE0 -_08159928: .4byte gActiveBattler -_0815992C: - ldr r5, _0815998C @ =gActionSelectionCursor - adds r0, r2, r5 - ldrb r0, [r0] - ldrb r2, [r3] - cmp r0, r2 - beq _08159972 - ldrb r0, [r3, 0x4] - lsrs r0, 1 - cmp r0, r1 - bne _08159972 - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - bl ActionSelectionDestroyCursorAt - ldrb r1, [r4] - adds r2, r1, r5 - lsls r0, r1, 2 - adds r0, r6 - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 3 - adds r0, r7 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldrb r0, [r4] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl ActionSelectionCreateCursorAt -_08159972: - ldr r1, _08159990 @ =gUnknown_3005EE0 - ldr r0, _08159994 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldrb r0, [r1, 0x2] - adds r0, 0x1 - strb r0, [r1, 0x2] -_08159984: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815998C: .4byte gActionSelectionCursor -_08159990: .4byte gUnknown_3005EE0 -_08159994: .4byte gActiveBattler - thumb_func_end sub_8159824 - - thumb_func_start sub_8159998 -sub_8159998: @ 8159998 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r1, _08159A38 @ =gUnknown_84790D8 - ldr r0, _08159A3C @ =gBattleStruct - ldr r0, [r0] - adds r0, 0x96 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r7, [r0] - ldr r0, _08159A40 @ =gUnknown_3005EE0 - mov r8, r0 - ldr r6, _08159A44 @ =gActiveBattler - ldrb r2, [r6] - lsls r0, r2, 2 - add r0, r8 - ldr r1, [r0] - ldrb r0, [r1, 0x1] - lsls r0, 3 - adds r0, r7 - adds r3, r0, r2 - ldrb r0, [r3, 0x4] - ldrb r4, [r1, 0x2] - cmp r0, r4 - bne _08159A48 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _081599DE - movs r0, 0x5 - bl PlaySE -_081599DE: - ldrb r0, [r6] - lsls r0, 2 - add r0, r8 - ldr r0, [r0] - movs r4, 0 - strb r4, [r0, 0x2] - ldrb r1, [r6] - lsls r0, r1, 2 - add r0, r8 - ldr r0, [r0] - ldrb r0, [r0, 0x1] - lsls r0, 3 - adds r0, r7 - adds r0, r1 - ldrb r2, [r0] - movs r0, 0x1 - eors r1, r0 - lsls r1, 8 - orrs r2, r1 - movs r0, 0x1 - movs r1, 0xA - bl BtlController_EmitTwoReturnValues - bl PlayerPartnerBufferExecCompleted - ldrb r0, [r6] - lsls r0, 2 - add r0, r8 - ldr r1, [r0] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldrb r1, [r6] - lsls r0, r1, 2 - add r0, r8 - ldr r2, [r0] - ldrb r0, [r2, 0x1] - lsls r0, 3 - adds r0, r7 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08159AA0 - strb r4, [r2, 0x1] - b _08159AA0 - .align 2, 0 -_08159A38: .4byte gUnknown_84790D8 -_08159A3C: .4byte gBattleStruct -_08159A40: .4byte gUnknown_3005EE0 -_08159A44: .4byte gActiveBattler -_08159A48: - ldr r5, _08159AAC @ =gMoveSelectionCursor - adds r1, r2, r5 - ldrb r0, [r3] - ldrb r1, [r1] - cmp r0, r1 - beq _08159A8E - ldrb r0, [r3, 0x4] - lsrs r0, 1 - cmp r0, r4 - bne _08159A8E - movs r0, 0x5 - bl PlaySE - ldrb r0, [r6] - adds r0, r5 - ldrb r0, [r0] - bl MoveSelectionDestroyCursorAt - ldrb r1, [r6] - adds r2, r1, r5 - lsls r0, r1, 2 - add r0, r8 - ldr r0, [r0] - ldrb r0, [r0, 0x1] - lsls r0, 3 - adds r0, r7 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - ldrb r0, [r6] - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl MoveSelectionCreateCursorAt -_08159A8E: - ldr r1, _08159AB0 @ =gUnknown_3005EE0 - ldr r0, _08159AB4 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldrb r0, [r1, 0x2] - adds r0, 0x1 - strb r0, [r1, 0x2] -_08159AA0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08159AAC: .4byte gMoveSelectionCursor -_08159AB0: .4byte gUnknown_3005EE0 -_08159AB4: .4byte gActiveBattler - thumb_func_end sub_8159998 - - thumb_func_start sub_8159AB8 -sub_8159AB8: @ 8159AB8 - push {r4-r7,lr} - ldr r1, _08159B54 @ =gUnknown_8479198 - ldr r4, _08159B58 @ =gBattleStruct - ldr r2, [r4] - adds r0, r2, 0 - adds r0, 0x96 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r6, [r0] - ldr r3, _08159B5C @ =gActiveBattler - ldrb r5, [r3] - lsls r1, r5, 9 - ldr r0, _08159B60 @ =gBattleBufferA + 2 - adds r7, r1, r0 - mov r12, r7 - subs r0, 0x2 - adds r1, r0 - adds r2, 0x97 - ldrb r0, [r2] - lsls r0, 3 - adds r0, r6 - ldrb r1, [r1] - adds r7, r4, 0 - adds r4, r3, 0 - ldrb r2, [r0] - cmp r1, r2 - bne _08159B70 - ldrb r2, [r0, 0x1] - cmp r5, r2 - bne _08159B70 - cmp r1, 0x10 - bne _08159B04 - ldrh r0, [r0, 0x2] - mov r1, r12 - ldrh r1, [r1] - cmp r0, r1 - bne _08159B70 -_08159B04: - ldr r0, [r7] - adds r3, r0, 0 - adds r3, 0x97 - ldrb r1, [r3] - lsls r0, r1, 3 - adds r0, r6 - ldr r2, [r0, 0x4] - cmp r2, 0 - beq _08159B6C - ldr r1, _08159B64 @ =gBattlerControllerFuncs - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - str r2, [r0] - ldr r2, _08159B68 @ =gUnknown_3005EE0 - ldrb r0, [r4] - lsls r0, 2 - adds r0, r2 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x2] - ldrb r0, [r4] - lsls r0, 2 - adds r0, r2 - ldr r1, [r0] - ldr r0, [r7] - adds r0, 0x97 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r6 - ldrh r0, [r0, 0x2] - strb r0, [r1, 0x3] - ldr r1, [r7] - adds r1, 0x97 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0x1 - b _08159B72 - .align 2, 0 -_08159B54: .4byte gUnknown_8479198 -_08159B58: .4byte gBattleStruct -_08159B5C: .4byte gActiveBattler -_08159B60: .4byte gBattleBufferA + 2 -_08159B64: .4byte gBattlerControllerFuncs -_08159B68: .4byte gUnknown_3005EE0 -_08159B6C: - adds r0, r1, 0x1 - strb r0, [r3] -_08159B70: - movs r0, 0 -_08159B72: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8159AB8 - - thumb_func_start sub_8159B78 -sub_8159B78: @ 8159B78 - ldr r1, _08159B98 @ =gUnknown_3005EE0 - ldr r2, _08159B9C @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x2] - ldr r1, _08159BA0 @ =gBattlerControllerFuncs - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08159BA4 @ =sub_81560DC - str r1, [r0] - bx lr - .align 2, 0 -_08159B98: .4byte gUnknown_3005EE0 -_08159B9C: .4byte gActiveBattler -_08159BA0: .4byte gBattlerControllerFuncs -_08159BA4: .4byte sub_81560DC - thumb_func_end sub_8159B78 - - thumb_func_start sub_8159BA8 -sub_8159BA8: @ 8159BA8 - push {r4,r5,lr} - sub sp, 0x4 - ldr r1, _08159BD0 @ =gUnknown_3005EE0 - ldr r2, _08159BD4 @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldrb r0, [r0, 0x2] - adds r5, r1, 0 - adds r4, r2, 0 - cmp r0, 0x4 - bls _08159BC4 - b _08159CEE -_08159BC4: - lsls r0, 2 - ldr r1, _08159BD8 @ =_08159BDC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08159BD0: .4byte gUnknown_3005EE0 -_08159BD4: .4byte gActiveBattler -_08159BD8: .4byte _08159BDC - .align 2, 0 -_08159BDC: - .4byte _08159BF0 - .4byte _08159C14 - .4byte _08159C44 - .4byte _08159C64 - .4byte _08159CB4 -_08159BF0: - ldr r0, _08159C10 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08159CEE - movs r0, 0x81 - negs r0, r0 - str r1, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x8 - b _08159C90 - .align 2, 0 -_08159C10: .4byte gPaletteFade -_08159C14: - ldr r0, _08159C3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08159CEE - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - ldr r1, [r0] - ldr r0, _08159C40 @ =gBattle_BG0_Y - ldrh r0, [r0] - strb r0, [r1, 0x4] - bl sub_80EB30C - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - b _08159C9E - .align 2, 0 -_08159C3C: .4byte gPaletteFade -_08159C40: .4byte gBattle_BG0_Y -_08159C44: - ldr r1, _08159C5C @ =gBattle_BG0_Y - movs r0, 0 - strh r0, [r1] - bl sub_8159EF0 - bl BattleStringExpandPlaceholdersToDisplayedString - ldr r0, _08159C60 @ =gDisplayedStringBattle - movs r1, 0x18 - bl BattlePutTextOnWindow - b _08159C94 - .align 2, 0 -_08159C5C: .4byte gBattle_BG0_Y -_08159C60: .4byte gDisplayedStringBattle -_08159C64: - movs r0, 0x18 - bl IsTextPrinterActive - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - bne _08159CEE - ldr r0, _08159CA8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08159CEE - movs r0, 0x5 - bl PlaySE - movs r0, 0x81 - negs r0, r0 - str r4, [sp] - movs r1, 0x4 - movs r2, 0x8 - movs r3, 0 -_08159C90: - bl BeginNormalPaletteFade -_08159C94: - ldr r1, _08159CAC @ =gUnknown_3005EE0 - ldr r0, _08159CB0 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 -_08159C9E: - ldr r1, [r0] - ldrb r0, [r1, 0x2] - adds r0, 0x1 - strb r0, [r1, 0x2] - b _08159CEE - .align 2, 0 -_08159CA8: .4byte gMain -_08159CAC: .4byte gUnknown_3005EE0 -_08159CB0: .4byte gActiveBattler -_08159CB4: - ldr r0, _08159CF8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08159CEE - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - cmp r0, 0xD - bne _08159CD8 - bl BattleStopLowHpSound - ldr r0, _08159CFC @ =0x00000137 - bl PlayBGM -_08159CD8: - ldr r1, _08159D00 @ =gBattle_BG0_Y - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - ldr r0, [r0] - ldrb r0, [r0, 0x4] - strh r0, [r1] - bl sub_80EB524 - bl sub_8159B78 -_08159CEE: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08159CF8: .4byte gPaletteFade -_08159CFC: .4byte 0x00000137 -_08159D00: .4byte gBattle_BG0_Y - thumb_func_end sub_8159BA8 - - thumb_func_start sub_8159D04 -sub_8159D04: @ 8159D04 - push {r4-r6,lr} - sub sp, 0x4 - ldr r1, _08159D28 @ =gUnknown_3005EE0 - ldr r2, _08159D2C @ =gActiveBattler - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldrb r0, [r0, 0x2] - adds r3, r1, 0 - cmp r0, 0x6 - bls _08159D1E - b _08159EDE -_08159D1E: - lsls r0, 2 - ldr r1, _08159D30 @ =_08159D34 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08159D28: .4byte gUnknown_3005EE0 -_08159D2C: .4byte gActiveBattler -_08159D30: .4byte _08159D34 - .align 2, 0 -_08159D34: - .4byte _08159D50 - .4byte _08159D98 - .4byte _08159DDC - .4byte _08159DF4 - .4byte _08159E0C - .4byte _08159E64 - .4byte _08159EA4 -_08159D50: - ldr r0, _08159D90 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - beq _08159D62 - b _08159EDE -_08159D62: - ldr r0, _08159D94 @ =gBattleStruct - ldr r4, [r0] - adds r5, r4, 0 - adds r5, 0x95 - adds r4, 0x94 - movs r0, 0 - bl GetBattlerAtPosition - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80EEFC8 - movs r0, 0x81 - negs r0, r0 - str r6, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x8 - b _08159E80 - .align 2, 0 -_08159D90: .4byte gPaletteFade -_08159D94: .4byte gBattleStruct -_08159D98: - ldr r0, _08159DD0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _08159DAA - b _08159EDE -_08159DAA: - ldr r2, _08159DD4 @ =gBitTable - ldr r0, _08159DD8 @ =gBattleStruct - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x95 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r2 - adds r0, 0x94 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r1, [r1] - ldr r0, [r0] - orrs r1, r0 - lsls r0, r1, 16 - str r3, [sp] - b _08159E7A - .align 2, 0 -_08159DD0: .4byte gPaletteFade -_08159DD4: .4byte gBitTable -_08159DD8: .4byte gBattleStruct -_08159DDC: - ldr r0, _08159DF0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08159DEA - b _08159EDE -_08159DEA: - bl sub_80EB30C - b _08159E84 - .align 2, 0 -_08159DF0: .4byte gPaletteFade -_08159DF4: - bl sub_8159EF0 - bl BattleStringExpandPlaceholdersToDisplayedString - ldr r0, _08159E08 @ =gDisplayedStringBattle - movs r1, 0x18 - bl BattlePutTextOnWindow - b _08159E84 - .align 2, 0 -_08159E08: .4byte gDisplayedStringBattle -_08159E0C: - movs r0, 0x18 - bl IsTextPrinterActive - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - bne _08159EDE - ldr r0, _08159E58 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08159EDE - movs r0, 0x5 - bl PlaySE - ldr r2, _08159E5C @ =gBitTable - ldr r0, _08159E60 @ =gBattleStruct - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x95 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r2 - adds r0, 0x94 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r1, [r1] - ldr r0, [r0] - orrs r1, r0 - lsls r0, r1, 16 - str r4, [sp] - movs r1, 0x4 - movs r2, 0 - movs r3, 0x8 - b _08159E80 - .align 2, 0 -_08159E58: .4byte gMain -_08159E5C: .4byte gBitTable -_08159E60: .4byte gBattleStruct -_08159E64: - ldr r0, _08159E98 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08159EDE - movs r0, 0x81 - negs r0, r0 - str r1, [sp] -_08159E7A: - movs r1, 0x4 - movs r2, 0x8 - movs r3, 0 -_08159E80: - bl BeginNormalPaletteFade -_08159E84: - ldr r1, _08159E9C @ =gUnknown_3005EE0 - ldr r0, _08159EA0 @ =gActiveBattler - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldrb r0, [r1, 0x2] - adds r0, 0x1 - strb r0, [r1, 0x2] - b _08159EDE - .align 2, 0 -_08159E98: .4byte gPaletteFade -_08159E9C: .4byte gUnknown_3005EE0 -_08159EA0: .4byte gActiveBattler -_08159EA4: - ldr r0, _08159EE8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08159EDE - ldrb r0, [r2] - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - cmp r0, 0xD - bne _08159EC8 - bl BattleStopLowHpSound - ldr r0, _08159EEC @ =0x00000137 - bl PlayBGM -_08159EC8: - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - bl sub_80EF0E0 - bl sub_80EB524 - bl sub_8159B78 -_08159EDE: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08159EE8: .4byte gPaletteFade -_08159EEC: .4byte 0x00000137 - thumb_func_end sub_8159D04 - - thumb_func_start sub_8159EF0 -sub_8159EF0: @ 8159EF0 - push {lr} - ldr r0, _08159F10 @ =gBattleStruct - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x96 - ldrb r1, [r1] - cmp r1, 0x1 - beq _08159F18 - cmp r1, 0x1 - ble _08159F0C - cmp r1, 0x2 - beq _08159F20 - cmp r1, 0x3 - beq _08159F28 -_08159F0C: - ldr r1, _08159F14 @ =gUnknown_84791A8 - b _08159F2A - .align 2, 0 -_08159F10: .4byte gBattleStruct -_08159F14: .4byte gUnknown_84791A8 -_08159F18: - ldr r1, _08159F1C @ =gUnknown_84791B8 - b _08159F2A - .align 2, 0 -_08159F1C: .4byte gUnknown_84791B8 -_08159F20: - ldr r1, _08159F24 @ =gUnknown_84791CC - b _08159F2A - .align 2, 0 -_08159F24: .4byte gUnknown_84791CC -_08159F28: - ldr r1, _08159F3C @ =gUnknown_84791E8 -_08159F2A: - adds r0, 0x97 - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - pop {r1} - bx r1 - .align 2, 0 -_08159F3C: .4byte gUnknown_84791E8 - thumb_func_end sub_8159EF0 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/electric.s b/asm/electric.s deleted file mode 100644 index fa92c096a..000000000 --- a/asm/electric.s +++ /dev/null @@ -1,2675 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80ADBEC -sub_80ADBEC: @ 80ADBEC - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080ADC0C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080ADC14 - ldr r0, _080ADC10 @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r2, [r0] - subs r1, r2 - strh r1, [r4, 0x20] - b _080ADC20 - .align 2, 0 -_080ADC0C: .4byte gBattleAnimAttacker -_080ADC10: .4byte gBattleAnimArgs -_080ADC14: - ldr r1, _080ADC34 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, r1, 0 -_080ADC20: - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r0, _080ADC38 @ =sub_80ADC3C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ADC34: .4byte gBattleAnimArgs -_080ADC38: .4byte sub_80ADC3C - thumb_func_end sub_80ADBEC - - thumb_func_start sub_80ADC3C -sub_80ADC3C: @ 80ADC3C - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080ADC52 - adds r0, r2, 0 - bl DestroyAnimSprite -_080ADC52: - pop {r0} - bx r0 - thumb_func_end sub_80ADC3C - - thumb_func_start sub_80ADC58 -sub_80ADC58: @ 80ADC58 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080ADC78 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080ADC80 - ldr r0, _080ADC7C @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r0, [r0] - subs r1, r0 - strh r1, [r4, 0x20] - b _080ADC8A - .align 2, 0 -_080ADC78: .4byte gBattleAnimAttacker -_080ADC7C: .4byte gBattleAnimArgs -_080ADC80: - ldr r0, _080ADC94 @ =gBattleAnimArgs - ldrh r0, [r0] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] -_080ADC8A: - ldr r0, _080ADC98 @ =sub_80ADC9C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ADC94: .4byte gBattleAnimArgs -_080ADC98: .4byte sub_80ADC9C - thumb_func_end sub_80ADC58 - - thumb_func_start sub_80ADC9C -sub_80ADC9C: @ 80ADC9C - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080ADCB2 - adds r0, r2, 0 - bl DestroySpriteAndMatrix -_080ADCB2: - pop {r0} - bx r0 - thumb_func_end sub_80ADC9C - - thumb_func_start sub_80ADCB8 -sub_80ADCB8: @ 80ADCB8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080ADCFC @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r0, _080ADD00 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080ADD08 - ldr r2, _080ADD04 @ =gBattleAnimArgs - ldrh r0, [r5, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x22] - ldrh r1, [r2, 0x2] - subs r0, r1 - strh r0, [r5, 0x22] - b _080ADD1C - .align 2, 0 -_080ADCFC: .4byte gBattleAnimTarget -_080ADD00: .4byte gBattleAnimAttacker -_080ADD04: .4byte gBattleAnimArgs -_080ADD08: - ldr r0, _080ADD40 @ =gBattleAnimArgs - ldrh r1, [r0] - ldrh r2, [r5, 0x20] - adds r1, r2 - strh r1, [r5, 0x20] - ldrh r1, [r0, 0x2] - ldrh r2, [r5, 0x22] - adds r1, r2 - strh r1, [r5, 0x22] - adds r2, r0, 0 -_080ADD1C: - movs r0, 0 - strh r0, [r5, 0x2E] - ldrh r0, [r2, 0x4] - strh r0, [r5, 0x30] - ldrh r0, [r2, 0x6] - strh r0, [r5, 0x32] - ldrh r0, [r2, 0x8] - strh r0, [r5, 0x34] - ldr r1, _080ADD44 @ =DestroySpriteAndMatrix - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080ADD48 @ =TranslateSpriteInCircleOverDuration - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ADD40: .4byte gBattleAnimArgs -_080ADD44: .4byte DestroySpriteAndMatrix -_080ADD48: .4byte TranslateSpriteInCircleOverDuration - thumb_func_end sub_80ADCB8 - - thumb_func_start sub_80ADD4C -sub_80ADD4C: @ 80ADD4C - push {r4-r7,lr} - adds r5, r0, 0 - ldr r0, _080ADD64 @ =gBattleAnimArgs - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0x1 - beq _080ADDC4 - cmp r0, 0x1 - bgt _080ADD68 - cmp r0, 0 - beq _080ADD72 - b _080ADDC4 - .align 2, 0 -_080ADD64: .4byte gBattleAnimArgs -_080ADD68: - cmp r0, 0x2 - beq _080ADD7C - cmp r0, 0x3 - beq _080ADDA0 - b _080ADDC4 -_080ADD72: - ldr r0, _080ADD78 @ =gBattleAnimAttacker - b _080ADDC6 - .align 2, 0 -_080ADD78: .4byte gBattleAnimAttacker -_080ADD7C: - ldr r4, _080ADD94 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r6, 0x2 - eors r0, r6 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _080ADD98 - ldrb r4, [r4] - b _080ADDC8 - .align 2, 0 -_080ADD94: .4byte gBattleAnimAttacker -_080ADD98: - ldrb r0, [r4] - adds r4, r6, 0 - eors r4, r0 - b _080ADDC8 -_080ADDA0: - ldr r0, _080ADDBC @ =gBattleAnimAttacker - ldrb r0, [r0] - movs r4, 0x2 - eors r0, r4 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080ADDC4 - ldr r0, _080ADDC0 @ =gBattleAnimTarget - ldrb r0, [r0] - eors r4, r0 - b _080ADDC8 - .align 2, 0 -_080ADDBC: .4byte gBattleAnimAttacker -_080ADDC0: .4byte gBattleAnimTarget -_080ADDC4: - ldr r0, _080ADDE8 @ =gBattleAnimTarget -_080ADDC6: - ldrb r4, [r0] -_080ADDC8: - ldr r0, _080ADDEC @ =gBattleAnimArgs - movs r2, 0xA - ldrsh r0, [r0, r2] - cmp r0, 0 - bne _080ADDF0 - adds r0, r4, 0 - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - adds r0, r4, 0 - movs r1, 0x1 - b _080ADE02 - .align 2, 0 -_080ADDE8: .4byte gBattleAnimTarget -_080ADDEC: .4byte gBattleAnimArgs -_080ADDF0: - adds r0, r4, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - adds r0, r4, 0 - movs r1, 0x3 -_080ADE02: - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r7, _080ADEA0 @ =gSineTable - ldr r6, _080ADEA4 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r6, r1] - lsls r0, 1 - adds r0, r7 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r2, 0x2 - ldrsh r0, [r6, r2] - muls r0, r1 - asrs r0, 8 - strh r0, [r5, 0x24] - movs r1, 0 - ldrsh r0, [r6, r1] - adds r0, 0x40 - lsls r0, 1 - adds r0, r7 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r2, 0x2 - ldrsh r0, [r6, r2] - muls r0, r1 - asrs r0, 8 - strh r0, [r5, 0x26] - ldrh r1, [r6, 0xC] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080ADE66 - adds r0, r4, 0 - bl GetBattlerSpriteBGPriority - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - lsls r0, 2 - ldrb r2, [r5, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r5, 0x5] -_080ADE66: - ldrb r2, [r5, 0x3] - lsls r2, 26 - lsrs r2, 27 - movs r0, 0x4 - ldrsh r1, [r6, r0] - lsls r0, r1, 1 - adds r0, r7 - ldrh r0, [r0] - ldr r3, _080ADEA8 @ =gOamMatrices - lsls r2, 3 - adds r2, r3 - adds r1, 0x40 - lsls r1, 1 - adds r1, r7 - ldrh r1, [r1] - strh r1, [r2, 0x6] - strh r1, [r2] - strh r0, [r2, 0x2] - lsls r0, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r2, 0x4] - ldrh r0, [r6, 0x6] - strh r0, [r5, 0x2E] - ldr r0, _080ADEAC @ =sub_80B1D3C - str r0, [r5, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080ADEA0: .4byte gSineTable -_080ADEA4: .4byte gBattleAnimArgs -_080ADEA8: .4byte gOamMatrices -_080ADEAC: .4byte sub_80B1D3C - thumb_func_end sub_80ADD4C - - thumb_func_start sub_80ADEB0 -sub_80ADEB0: @ 80ADEB0 - push {r4-r6,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r5, _080ADF24 @ =gBattleAnimArgs - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldr r6, _080ADF28 @ =gBattleAnimTarget - ldrb r0, [r6] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - ldrb r0, [r6] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - adds r0, r4, 0 - bl InitAnimLinearTranslation - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x38] - ldrh r0, [r5, 0xA] - strh r0, [r4, 0x3A] - ldrh r0, [r5, 0x8] - strh r0, [r4, 0x3C] - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - movs r3, 0xC - ldrsh r0, [r5, r3] - lsls r0, 2 - adds r1, r0 - ldr r3, _080ADF2C @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080ADF30 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - ldr r1, _080ADF34 @ =sub_80ADF38 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080ADF24: .4byte gBattleAnimArgs -_080ADF28: .4byte gBattleAnimTarget -_080ADF2C: .4byte 0x000003ff -_080ADF30: .4byte 0xfffffc00 -_080ADF34: .4byte sub_80ADF38 - thumb_func_end sub_80ADEB0 - - thumb_func_start sub_80ADF38 -sub_80ADF38: @ 80ADF38 - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - bne _080ADFA2 - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r2, 0x3C - ldrsh r0, [r4, r2] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Cos - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - ldrh r2, [r4, 0x3C] - adds r0, r2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r1, 0x3 - bl __modsi3 - lsls r0, 16 - cmp r0, 0 - bne _080ADFA8 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _080ADFA8 -_080ADFA2: - adds r0, r4, 0 - bl DestroyAnimSprite -_080ADFA8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ADF38 - - thumb_func_start sub_80ADFB0 -sub_80ADFB0: @ 80ADFB0 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x38] - subs r0, 0x1 - strh r0, [r3, 0x38] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080ADFE8 - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x36] - strh r0, [r3, 0x38] -_080ADFE8: - ldrh r0, [r3, 0x34] - subs r1, r0, 0x1 - strh r1, [r3, 0x34] - lsls r0, 16 - cmp r0, 0 - bgt _080ADFFA - adds r0, r3, 0 - bl DestroyAnimSprite -_080ADFFA: - pop {r0} - bx r0 - thumb_func_end sub_80ADFB0 - - thumb_func_start sub_80AE000 -sub_80AE000: @ 80AE000 - push {r4-r6,lr} - adds r6, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AE01C - ldr r0, _080AE060 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AE024 -_080AE01C: - ldr r1, _080AE064 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] -_080AE024: - ldr r5, _080AE060 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r4, _080AE064 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x22] - ldrh r0, [r4] - strh r0, [r6, 0x34] - ldrh r0, [r4, 0x6] - strh r0, [r6, 0x36] - strh r0, [r6, 0x38] - ldr r0, _080AE068 @ =sub_80ADFB0 - str r0, [r6, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AE060: .4byte gBattleAnimTarget -_080AE064: .4byte gBattleAnimArgs -_080AE068: .4byte sub_80ADFB0 - thumb_func_end sub_80AE000 - - thumb_func_start sub_80AE06C -sub_80AE06C: @ 80AE06C - push {r4-r6,lr} - adds r5, r0, 0 - ldr r1, _080AE088 @ =gBattleAnimArgs - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x2E] - movs r2, 0xE - ldrsh r0, [r1, r2] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _080AE090 - ldr r0, _080AE08C @ =gBattleAnimTarget - b _080AE092 - .align 2, 0 -_080AE088: .4byte gBattleAnimArgs -_080AE08C: .4byte gBattleAnimTarget -_080AE090: - ldr r0, _080AE118 @ =gBattleAnimAttacker -_080AE092: - ldrb r6, [r0] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AE0AA - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AE0B2 -_080AE0AA: - ldr r1, _080AE11C @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] -_080AE0B2: - adds r0, r6, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r4, _080AE11C @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r3, [r4] - adds r0, r3 - strh r0, [r5, 0x20] - adds r0, r6, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r5, 0x22] - ldrh r1, [r4, 0xE] - ldr r0, _080AE120 @ =0x00007fff - ands r0, r1 - strh r0, [r5, 0x36] - ldrh r0, [r4, 0x4] - strh r0, [r5, 0x38] - ldrh r0, [r4, 0xA] - strh r0, [r5, 0x3A] - ldrh r0, [r4, 0x8] - strh r0, [r5, 0x3C] - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - movs r3, 0xC - ldrsh r0, [r4, r3] - lsls r0, 2 - adds r1, r0 - ldr r3, _080AE124 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080AE128 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - ldr r1, _080AE12C @ =sub_80AE130 - str r1, [r5, 0x1C] - adds r0, r5, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AE118: .4byte gBattleAnimAttacker -_080AE11C: .4byte gBattleAnimArgs -_080AE120: .4byte 0x00007fff -_080AE124: .4byte 0x000003ff -_080AE128: .4byte 0xfffffc00 -_080AE12C: .4byte sub_80AE130 - thumb_func_end sub_80AE06C - - thumb_func_start sub_80AE130 -sub_80AE130: @ 80AE130 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x3C] - adds r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - movs r2, 0x3C - ldrsh r0, [r4, r2] - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl __modsi3 - cmp r0, 0 - bne _080AE186 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080AE186: - ldrh r0, [r4, 0x2E] - subs r1, r0, 0x1 - strh r1, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bgt _080AE198 - adds r0, r4, 0 - bl DestroyAnimSprite -_080AE198: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AE130 - - thumb_func_start sub_80AE1A0 -sub_80AE1A0: @ 80AE1A0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - ldr r3, _080AE1DC @ =gBattleAnimArgs - movs r5, 0x6 - ldrsh r0, [r3, r5] - lsls r0, 2 - adds r1, r0 - ldr r5, _080AE1E0 @ =0x000003ff - adds r0, r5, 0 - ands r1, r0 - ldr r0, _080AE1E4 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - movs r1, 0x6 - ldrsh r0, [r3, r1] - cmp r0, 0x1 - bne _080AE1E8 - ldrb r0, [r4, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x10 - b _080AE1F6 - .align 2, 0 -_080AE1DC: .4byte gBattleAnimArgs -_080AE1E0: .4byte 0x000003ff -_080AE1E4: .4byte 0xfffffc00 -_080AE1E8: - cmp r0, 0x2 - bne _080AE1FA - ldrb r0, [r4, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x20 -_080AE1F6: - orrs r1, r0 - strb r1, [r4, 0x3] -_080AE1FA: - ldr r0, _080AE214 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - ldr r0, _080AE218 @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080AE21C @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AE214: .4byte gBattleAnimArgs -_080AE218: .4byte WaitAnimForDuration -_080AE21C: .4byte DestroyAnimSprite - thumb_func_end sub_80AE1A0 - - thumb_func_start sub_80AE220 -sub_80AE220: @ 80AE220 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _080AE268 @ =gBattleAnimTarget - ldrb r0, [r6] - movs r1, 0 - bl GetBattlerSpriteCoord - ldr r1, _080AE26C @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r1 - lsls r0, 24 - ldr r5, _080AE270 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r5] - adds r0, r1 - strh r0, [r4, 0x8] - ldrb r0, [r6] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r5, 0x2] - adds r0, r1 - strh r0, [r4, 0xA] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0xC] - ldr r0, _080AE274 @ =sub_80AE278 - str r0, [r4] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AE268: .4byte gBattleAnimTarget -_080AE26C: .4byte gTasks -_080AE270: .4byte gBattleAnimArgs -_080AE274: .4byte sub_80AE278 - thumb_func_end sub_80AE220 - - thumb_func_start sub_80AE278 -sub_80AE278: @ 80AE278 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r5, 0 - movs r7, 0 - ldr r1, _080AE2B8 @ =gTasks - lsls r0, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - ldrb r2, [r0, 0xC] - str r2, [sp] - ldrh r4, [r0, 0x8] - ldrh r6, [r0, 0xA] - movs r3, 0xC - ldrsh r0, [r0, r3] - mov r10, r1 - cmp r0, 0 - bne _080AE2BC - movs r0, 0 - mov r8, r0 - movs r2, 0x1 - movs r1, 0x10 - mov r12, r1 - b _080AE2C6 - .align 2, 0 -_080AE2B8: .4byte gTasks -_080AE2BC: - movs r2, 0x10 - mov r12, r2 - movs r3, 0x8 - mov r8, r3 - movs r2, 0x4 -_080AE2C6: - mov r0, r9 - lsls r1, r0, 2 - adds r0, r1, r0 - lsls r0, 3 - add r0, r10 - movs r3, 0x1C - ldrsh r0, [r0, r3] - mov r10, r1 - cmp r0, 0xA - bhi _080AE3BC - lsls r0, 2 - ldr r1, _080AE2E4 @ =_080AE2E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080AE2E4: .4byte _080AE2E8 - .align 2, 0 -_080AE2E8: - .4byte _080AE314 - .4byte _080AE3BC - .4byte _080AE328 - .4byte _080AE3BC - .4byte _080AE348 - .4byte _080AE3BC - .4byte _080AE35E - .4byte _080AE3BC - .4byte _080AE380 - .4byte _080AE3BC - .4byte _080AE3B4 -_080AE314: - ldr r0, _080AE324 @ =gUnknown_83E60A0 - lsls r1, r4, 16 - asrs r1, 16 - lsls r2, r6, 16 - asrs r2, 16 - mov r4, r12 - lsls r3, r4, 16 - b _080AE396 - .align 2, 0 -_080AE324: .4byte gUnknown_83E60A0 -_080AE328: - mov r0, r12 - lsls r3, r0, 17 - mov r1, r8 - adds r0, r1, r2 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r0, _080AE344 @ =gUnknown_83E60A0 - lsls r1, r4, 16 - asrs r1, 16 - lsls r2, r6, 16 - asrs r2, 16 - b _080AE396 - .align 2, 0 -_080AE344: .4byte gUnknown_83E60A0 -_080AE348: - mov r3, r12 - lsls r0, r3, 16 - asrs r0, 16 - lsls r3, r0, 1 - adds r3, r0 - lsls r0, r2, 1 - add r0, r8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - b _080AE38A -_080AE35E: - mov r0, r12 - lsls r3, r0, 18 - lsls r0, r2, 1 - adds r0, r2 - add r0, r8 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r0, _080AE37C @ =gUnknown_83E60A0 - lsls r1, r4, 16 - asrs r1, 16 - lsls r2, r6, 16 - asrs r2, 16 - b _080AE396 - .align 2, 0 -_080AE37C: .4byte gUnknown_83E60A0 -_080AE380: - mov r1, r12 - lsls r0, r1, 16 - asrs r0, 16 - lsls r3, r0, 2 - adds r3, r0 -_080AE38A: - ldr r0, _080AE3B0 @ =gUnknown_83E60A0 - lsls r1, r4, 16 - asrs r1, 16 - lsls r2, r6, 16 - asrs r2, 16 - lsls r3, 16 -_080AE396: - asrs r3, 16 - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - b _080AE3BC - .align 2, 0 -_080AE3B0: .4byte gUnknown_83E60A0 -_080AE3B4: - mov r0, r9 - bl DestroyAnimVisualTask - b _080AE400 -_080AE3BC: - cmp r7, 0 - beq _080AE3F0 - ldr r4, _080AE410 @ =gSprites - lsls r3, r5, 4 - adds r3, r5 - lsls r3, 2 - adds r0, r3, r4 - ldrh r5, [r0, 0x4] - lsls r2, r5, 22 - lsrs r2, 22 - add r2, r8 - ldr r6, _080AE414 @ =0x000003ff - adds r1, r6, 0 - ands r2, r1 - ldr r1, _080AE418 @ =0xfffffc00 - ands r1, r5 - orrs r1, r2 - strh r1, [r0, 0x4] - mov r1, sp - ldrh r1, [r1] - strh r1, [r0, 0x2E] - adds r4, 0x1C - adds r3, r4 - ldr r1, [r3] - bl _call_via_r1 -_080AE3F0: - ldr r0, _080AE41C @ =gTasks - mov r1, r10 - add r1, r9 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x1C] - adds r0, 0x1 - strh r0, [r1, 0x1C] -_080AE400: - 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 -_080AE410: .4byte gSprites -_080AE414: .4byte 0x000003ff -_080AE418: .4byte 0xfffffc00 -_080AE41C: .4byte gTasks - thumb_func_end sub_80AE278 - - thumb_func_start sub_80AE420 -sub_80AE420: @ 80AE420 - push {lr} - adds r3, r0, 0 - movs r1, 0x2E - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080AE442 - ldrb r1, [r3, 0x1] - movs r2, 0x3F - adds r0, r2, 0 - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r3, 0x1] - ldrb r0, [r3, 0x3] - ands r2, r0 - strb r2, [r3, 0x3] - b _080AE456 -_080AE442: - ldrb r2, [r3, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - strb r0, [r3, 0x1] - ldrb r0, [r3, 0x3] - ands r1, r0 - movs r0, 0x40 - orrs r1, r0 - strb r1, [r3, 0x3] -_080AE456: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - bne _080AE46A - adds r0, r3, 0 - bl DestroySprite -_080AE46A: - pop {r0} - bx r0 - thumb_func_end sub_80AE420 - - thumb_func_start sub_80AE470 -sub_80AE470: @ 80AE470 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r0, _080AE4D8 @ =gBattleAnimArgs - ldrh r1, [r0] - ldrh r2, [r4, 0x20] - adds r1, r2 - strh r1, [r4, 0x20] - ldrh r0, [r0, 0x2] - ldrh r3, [r4, 0x22] - adds r0, r3 - strh r0, [r4, 0x22] - ldr r0, _080AE4DC @ =gUnknown_83E60B8 - adds r1, 0x20 - lsls r1, 16 - asrs r1, 16 - movs r7, 0x22 - ldrsh r2, [r4, r7] - adds r3, r4, 0 - adds r3, 0x43 - ldrb r3, [r3] - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r3, _080AE4E0 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r6, r2, r3 - ldrh r5, [r6, 0x4] - lsls r1, r5, 22 - lsrs r1, 22 - adds r1, 0x8 - ldr r7, _080AE4E4 @ =0x000003ff - adds r0, r7, 0 - ands r1, r0 - ldr r0, _080AE4E8 @ =0xfffffc00 - ands r0, r5 - orrs r0, r1 - strh r0, [r6, 0x4] - ldr r1, _080AE4EC @ =gAnimVisualTaskCount - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - adds r3, 0x1C - adds r2, r3 - ldr r0, _080AE4F0 @ =sub_80AE4F4 - str r0, [r2] - str r0, [r4, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AE4D8: .4byte gBattleAnimArgs -_080AE4DC: .4byte gUnknown_83E60B8 -_080AE4E0: .4byte gSprites -_080AE4E4: .4byte 0x000003ff -_080AE4E8: .4byte 0xfffffc00 -_080AE4EC: .4byte gAnimVisualTaskCount -_080AE4F0: .4byte sub_80AE4F4 - thumb_func_end sub_80AE470 - - thumb_func_start sub_80AE4F4 -sub_80AE4F4: @ 80AE4F4 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080AE528 - movs r0, 0 - strh r0, [r3, 0x2E] - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] -_080AE528: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x33 - bne _080AE53C - adds r0, r3, 0 - bl DestroyAnimSprite -_080AE53C: - pop {r0} - bx r0 - thumb_func_end sub_80AE4F4 - - thumb_func_start sub_80AE540 -sub_80AE540: @ 80AE540 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080AE560 @ =gTasks - adds r5, r1, r0 - ldr r0, _080AE564 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080AE56C - ldr r4, _080AE568 @ =gBattleAnimAttacker - b _080AE56E - .align 2, 0 -_080AE560: .4byte gTasks -_080AE564: .4byte gBattleAnimArgs -_080AE568: .4byte gBattleAnimAttacker -_080AE56C: - ldr r4, _080AE5B0 @ =gBattleAnimTarget -_080AE56E: - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x24] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x26] - ldr r2, _080AE5B4 @ =gBattleAnimArgs - ldrh r0, [r2, 0x2] - movs r1, 0 - strh r0, [r5, 0x14] - strh r1, [r5, 0x16] - strh r1, [r5, 0x18] - strh r1, [r5, 0x1A] - strh r1, [r5, 0x1C] - ldrh r0, [r2, 0x6] - strh r0, [r5, 0x1E] - strh r1, [r5, 0x20] - ldrh r0, [r2, 0x4] - strh r0, [r5, 0x22] - ldr r0, _080AE5B8 @ =sub_80AE5BC - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AE5B0: .4byte gBattleAnimTarget -_080AE5B4: .4byte gBattleAnimArgs -_080AE5B8: .4byte sub_80AE5BC - thumb_func_end sub_80AE540 - - thumb_func_start sub_80AE5BC -sub_80AE5BC: @ 80AE5BC - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - adds r2, r6, 0 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _080AE6A4 @ =gTasks - adds r5, r0, r1 - movs r1, 0x14 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080AE6BC - ldrh r0, [r5, 0x20] - adds r0, 0x1 - movs r7, 0 - strh r0, [r5, 0x20] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x22 - ldrsh r1, [r5, r2] - cmp r0, r1 - ble _080AE6CA - strh r7, [r5, 0x20] - ldr r0, _080AE6A8 @ =gUnknown_83E6120 - movs r3, 0x24 - ldrsh r1, [r5, r3] - movs r3, 0x26 - ldrsh r2, [r5, r3] - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _080AE6CA - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _080AE6AC @ =gSprites - adds r4, r0 - ldr r1, _080AE6B0 @ =gUnknown_83E60D0 - movs r2, 0x1A - ldrsh r0, [r5, r2] - lsls r0, 1 - adds r0, r1 - movs r3, 0 - ldrsb r3, [r0, r3] - ldrh r0, [r4, 0x20] - adds r3, r0 - strh r3, [r4, 0x20] - movs r2, 0x1A - ldrsh r0, [r5, r2] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - movs r2, 0 - ldrsb r2, [r0, r2] - ldrh r0, [r4, 0x22] - adds r2, r0 - strh r2, [r4, 0x22] - movs r1, 0x18 - ldrsh r0, [r5, r1] - lsls r1, r0, 2 - adds r1, r0 - movs r0, 0x28 - subs r0, r1 - strh r0, [r4, 0x2E] - strh r3, [r4, 0x30] - ldrh r0, [r5, 0x24] - strh r0, [r4, 0x32] - strh r2, [r4, 0x34] - ldrh r0, [r5, 0x26] - strh r0, [r4, 0x36] - strh r6, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimLinearTranslation - ldr r1, _080AE6B4 @ =sub_80AE704 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080AE6B8 @ =RunStoredCallbackWhenAnimEnds - str r0, [r4, 0x1C] - ldrh r0, [r5, 0x1A] - adds r0, 0x1 - strh r0, [r5, 0x1A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080AE674 - strh r7, [r5, 0x1A] -_080AE674: - ldrh r0, [r5, 0x1C] - adds r0, 0x1 - strh r0, [r5, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x1E - ldrsh r1, [r5, r2] - cmp r0, r1 - blt _080AE696 - strh r7, [r5, 0x1C] - ldrh r1, [r5, 0x18] - movs r3, 0x18 - ldrsh r0, [r5, r3] - cmp r0, 0x5 - bgt _080AE696 - adds r0, r1, 0x1 - strh r0, [r5, 0x18] -_080AE696: - ldrh r0, [r5, 0x16] - adds r0, 0x1 - strh r0, [r5, 0x16] - ldrh r0, [r5, 0x14] - subs r0, 0x1 - strh r0, [r5, 0x14] - b _080AE6CA - .align 2, 0 -_080AE6A4: .4byte gTasks -_080AE6A8: .4byte gUnknown_83E6120 -_080AE6AC: .4byte gSprites -_080AE6B0: .4byte gUnknown_83E60D0 -_080AE6B4: .4byte sub_80AE704 -_080AE6B8: .4byte RunStoredCallbackWhenAnimEnds -_080AE6BC: - movs r1, 0x16 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080AE6CA - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080AE6CA: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80AE5BC - - thumb_func_start sub_80AE6D0 -sub_80AE6D0: @ 80AE6D0 - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080AE6F8 - ldr r2, _080AE700 @ =gTasks - movs r0, 0x38 - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x16] - subs r1, 0x1 - strh r1, [r0, 0x16] - adds r0, r4, 0 - bl DestroySprite -_080AE6F8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AE700: .4byte gTasks - thumb_func_end sub_80AE6D0 - - thumb_func_start sub_80AE704 -sub_80AE704: @ 80AE704 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, _080AE718 @ =sub_80AE6D0 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AE718: .4byte sub_80AE6D0 - thumb_func_end sub_80AE704 - - thumb_func_start sub_80AE71C -sub_80AE71C: @ 80AE71C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080AE730 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080AE738 - ldr r4, _080AE734 @ =gBattleAnimAttacker - b _080AE73A - .align 2, 0 -_080AE730: .4byte gBattleAnimArgs -_080AE734: .4byte gBattleAnimAttacker -_080AE738: - ldr r4, _080AE768 @ =gBattleAnimTarget -_080AE73A: - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r1, _080AE76C @ =DestroySpriteAndMatrix - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080AE770 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AE768: .4byte gBattleAnimTarget -_080AE76C: .4byte DestroySpriteAndMatrix -_080AE770: .4byte RunStoredCallbackWhenAffineAnimEnds - thumb_func_end sub_80AE71C - - thumb_func_start sub_80AE774 -sub_80AE774: @ 80AE774 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080AE788 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080AE790 - ldr r4, _080AE78C @ =gBattleAnimAttacker - b _080AE792 - .align 2, 0 -_080AE788: .4byte gBattleAnimArgs -_080AE78C: .4byte gBattleAnimAttacker -_080AE790: - ldr r4, _080AE7CC @ =gBattleAnimTarget -_080AE792: - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r1, _080AE7D0 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r5, 0x24] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x26] - ldr r1, _080AE7D4 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080AE7D8 @ =RunStoredCallbackWhenAnimEnds - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AE7CC: .4byte gBattleAnimTarget -_080AE7D0: .4byte gBattleAnimArgs -_080AE7D4: .4byte DestroyAnimSprite -_080AE7D8: .4byte RunStoredCallbackWhenAnimEnds - thumb_func_end sub_80AE774 - - thumb_func_start sub_80AE7DC -sub_80AE7DC: @ 80AE7DC - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r4, _080AE834 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x3A] - movs r0, 0x10 - strh r0, [r5, 0x3C] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080AE82A - movs r1, 0x3C - ldrsh r0, [r5, r1] - negs r0, r0 - strh r0, [r5, 0x3C] -_080AE82A: - ldr r0, _080AE838 @ =sub_80AE83C - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AE834: .4byte gBattleAnimAttacker -_080AE838: .4byte sub_80AE83C - thumb_func_end sub_80AE7DC - - thumb_func_start sub_80AE83C -sub_80AE83C: @ 80AE83C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080AE84E - cmp r0, 0x1 - beq _080AE864 - b _080AE894 -_080AE84E: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x28 - ble _080AE894 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080AE894 -_080AE864: - ldrh r2, [r4, 0x3C] - ldrh r1, [r4, 0x20] - adds r0, r2, r1 - strh r0, [r4, 0x20] - ldr r3, _080AE89C @ =gSprites - movs r0, 0x3A - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x24] - adds r2, r1 - strh r2, [r0, 0x24] - ldrh r0, [r4, 0x20] - adds r0, 0x50 - lsls r0, 16 - movs r1, 0xC8 - lsls r1, 17 - cmp r0, r1 - bls _080AE894 - adds r0, r4, 0 - bl DestroySpriteAndMatrix -_080AE894: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AE89C: .4byte gSprites - thumb_func_end sub_80AE83C - - thumb_func_start sub_80AE8A0 -sub_80AE8A0: @ 80AE8A0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _080AE8C4 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080AE934 - cmp r0, 0x1 - bgt _080AE8C8 - cmp r0, 0 - beq _080AE8D4 - b _080AEA04 - .align 2, 0 -_080AE8C4: .4byte gTasks -_080AE8C8: - cmp r0, 0x2 - beq _080AE990 - cmp r0, 0x3 - bne _080AE8D2 - b _080AE9E4 -_080AE8D2: - b _080AEA04 -_080AE8D4: - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - movs r6, 0 - strh r0, [r5, 0x26] - ldr r4, _080AE908 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x24] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AE910 - ldr r0, _080AE90C @ =0x0000ffe0 - strh r0, [r5, 0x24] - movs r0, 0x2 - b _080AE916 - .align 2, 0 -_080AE908: .4byte gBattleAnimAttacker -_080AE90C: .4byte 0x0000ffe0 -_080AE910: - movs r0, 0x20 - strh r0, [r5, 0x24] - ldr r0, _080AE92C @ =0x0000fffe -_080AE916: - strh r0, [r5, 0x22] - ldr r2, _080AE930 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r5, 0x24] - strh r1, [r0, 0x24] - b _080AE9D6 - .align 2, 0 -_080AE92C: .4byte 0x0000fffe -_080AE930: .4byte gSprites -_080AE934: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AEA04 - movs r0, 0 - strh r0, [r5, 0xA] - ldr r4, _080AE98C @ =gSprites - movs r1, 0x26 - ldrsh r0, [r5, r1] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - adds r2, 0x3E - ldrb r3, [r2] - lsls r0, r3, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - ldrh r1, [r5, 0x24] - movs r2, 0x24 - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _080AE9D6 - ldrh r2, [r5, 0x22] - adds r2, r1, r2 - strh r2, [r5, 0x24] - movs r0, 0x26 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r2, [r0, 0x24] - b _080AEA04 - .align 2, 0 -_080AE98C: .4byte gSprites -_080AE990: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AEA04 - movs r0, 0 - strh r0, [r5, 0xA] - ldr r1, _080AE9E0 @ =gSprites - movs r2, 0x26 - ldrsh r0, [r5, r2] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - adds r2, 0x3E - ldrb r3, [r2] - lsls r0, r3, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - bne _080AEA04 -_080AE9D6: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080AEA04 - .align 2, 0 -_080AE9E0: .4byte gSprites -_080AE9E4: - ldr r2, _080AEA0C @ =gSprites - movs r0, 0x26 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - adds r0, r3, 0 - bl DestroyAnimVisualTask -_080AEA04: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AEA0C: .4byte gSprites - thumb_func_end sub_80AE8A0 - - thumb_func_start sub_80AEA10 -sub_80AEA10: @ 80AEA10 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080AEA34 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080AEA2A - b _080AEB50 -_080AEA2A: - cmp r0, 0x1 - bgt _080AEA38 - cmp r0, 0 - beq _080AEA40 - b _080AEB92 - .align 2, 0 -_080AEA34: .4byte gTasks -_080AEA38: - cmp r0, 0x2 - bne _080AEA3E - b _080AEB84 -_080AEA3E: - b _080AEB92 -_080AEA40: - ldr r4, _080AEA80 @ =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - movs r2, 0x1 - negs r2, r2 - adds r1, r2, 0 - cmp r0, 0 - bne _080AEA56 - movs r1, 0x1 -_080AEA56: - movs r6, 0 - strh r1, [r5, 0xA] - ldr r0, _080AEA84 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r2, [r0, r1] - adds r3, r0, 0 - cmp r2, 0 - beq _080AEA8C - cmp r2, 0x4 - beq _080AEAB4 - ldrh r1, [r3] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080AEAEC - movs r0, 0x80 - lsls r0, 1 - strh r0, [r5, 0xE] - ldr r0, _080AEA88 @ =0x0000fff0 - b _080AEAF4 - .align 2, 0 -_080AEA80: .4byte gBattleAnimAttacker -_080AEA84: .4byte gBattleAnimArgs -_080AEA88: .4byte 0x0000fff0 -_080AEA8C: - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0xE] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x12] - movs r2, 0xA - ldrsh r0, [r5, r2] - lsls r0, 7 - adds r0, 0x78 - strh r0, [r5, 0x10] - b _080AEB2A -_080AEAB4: - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r1, 7 - movs r0, 0x78 - subs r0, r1 - strh r0, [r5, 0xE] - ldr r4, _080AEAE8 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x12] - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - movs r2, 0xA - ldrsh r1, [r5, r2] - lsls r1, 5 - subs r0, r1 - strh r0, [r5, 0x10] - b _080AEB2A - .align 2, 0 -_080AEAE8: .4byte gBattleAnimTarget -_080AEAEC: - ldr r0, _080AEB10 @ =0x0000fff0 - strh r0, [r5, 0xE] - movs r0, 0x80 - lsls r0, 1 -_080AEAF4: - strh r0, [r5, 0x10] - movs r1, 0xA - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080AEB14 - movs r2, 0 - ldrsh r0, [r3, r2] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 1 - movs r0, 0x50 - subs r0, r1 - strh r0, [r5, 0x12] - b _080AEB2A - .align 2, 0 -_080AEB10: .4byte 0x0000fff0 -_080AEB14: - movs r0, 0 - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, 0x28 - strh r0, [r5, 0x12] - ldrh r1, [r5, 0xE] - ldrh r0, [r5, 0x10] - strh r0, [r5, 0xE] - strh r1, [r5, 0x10] -_080AEB2A: - movs r2, 0xE - ldrsh r1, [r5, r2] - movs r2, 0x10 - ldrsh r0, [r5, r2] - cmp r1, r0 - bge _080AEB40 - movs r1, 0 - movs r0, 0x1 - strh r0, [r5, 0xA] - strh r1, [r5, 0x14] - b _080AEB7C -_080AEB40: - ldr r0, _080AEB4C @ =0x0000ffff - strh r0, [r5, 0xA] - movs r0, 0x3 - strh r0, [r5, 0x14] - b _080AEB7C - .align 2, 0 -_080AEB4C: .4byte 0x0000ffff -_080AEB50: - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - cmp r0, 0 - ble _080AEB92 - movs r0, 0 - strh r0, [r5, 0xC] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80AEB98 - lsls r0, 24 - cmp r0, 0 - bne _080AEB7C - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80AEB98 - lsls r0, 24 - cmp r0, 0 - beq _080AEB92 -_080AEB7C: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080AEB92 -_080AEB84: - movs r1, 0x16 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080AEB92 - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080AEB92: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80AEA10 - - thumb_func_start sub_80AEB98 -sub_80AEB98: @ 80AEB98 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _080AEC24 @ =gUnknown_83E6278 - movs r2, 0xE - ldrsh r1, [r4, r2] - movs r3, 0x12 - ldrsh r2, [r4, r3] - movs r3, 0x23 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080AEBCE - ldr r1, _080AEC28 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - strh r5, [r0, 0x3A] - movs r1, 0x7 - strh r1, [r0, 0x3C] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] -_080AEBCE: - ldrh r1, [r4, 0xA] - ldrh r5, [r4, 0x14] - adds r0, r1, r5 - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - bge _080AEBE0 - movs r0, 0x3 - strh r0, [r4, 0x14] -_080AEBE0: - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0x3 - ble _080AEBEC - movs r0, 0 - strh r0, [r4, 0x14] -_080AEBEC: - movs r3, 0xA - ldrsh r0, [r4, r3] - lsls r0, 4 - ldrh r5, [r4, 0xE] - adds r2, r0, r5 - strh r2, [r4, 0xE] - lsls r0, r1, 16 - asrs r3, r0, 16 - cmp r3, 0x1 - bne _080AEC0C - lsls r0, r2, 16 - asrs r0, 16 - movs r5, 0x10 - ldrsh r1, [r4, r5] - cmp r0, r1 - bge _080AEC20 -_080AEC0C: - movs r0, 0x1 - negs r0, r0 - cmp r3, r0 - bne _080AEC2C - lsls r0, r2, 16 - asrs r0, 16 - movs r2, 0x10 - ldrsh r1, [r4, r2] - cmp r0, r1 - bgt _080AEC2C -_080AEC20: - movs r0, 0x1 - b _080AEC2E - .align 2, 0 -_080AEC24: .4byte gUnknown_83E6278 -_080AEC28: .4byte gSprites -_080AEC2C: - movs r0, 0 -_080AEC2E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80AEB98 - - thumb_func_start sub_80AEC34 -sub_80AEC34: @ 80AEC34 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - ble _080AEC74 - ldr r3, _080AEC7C @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080AEC74: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AEC7C: .4byte gTasks - thumb_func_end sub_80AEC34 - - thumb_func_start sub_80AEC80 -sub_80AEC80: @ 80AEC80 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080AEC92 - cmp r0, 0x1 - beq _080AECC4 - b _080AECD8 -_080AEC92: - ldr r4, _080AECC0 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - adds r0, r5, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080AECD8 - .align 2, 0 -_080AECC0: .4byte gBattleAnimAttacker -_080AECC4: - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080AECD8 - adds r0, r5, 0 - bl DestroySpriteAndMatrix -_080AECD8: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80AEC80 - - thumb_func_start sub_80AECE0 -sub_80AECE0: @ 80AECE0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080AED04 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x4 - bls _080AECFA - b _080AEE6C -_080AECFA: - lsls r0, 2 - ldr r1, _080AED08 @ =_080AED0C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080AED04: .4byte gTasks -_080AED08: .4byte _080AED0C - .align 2, 0 -_080AED0C: - .4byte _080AED20 - .4byte _080AEDB0 - .4byte _080AEDEC - .4byte _080AEE48 - .4byte _080AEE58 -_080AED20: - ldr r4, _080AEDA4 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x14] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x16] - movs r0, 0x4 - strh r0, [r5, 0x18] - ldr r0, _080AEDA8 @ =gBattleAnimTarget - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x1C] - movs r2, 0x1C - ldrsh r0, [r5, r2] - movs r2, 0x14 - ldrsh r1, [r5, r2] - subs r0, r1 - movs r1, 0x5 - bl __divsi3 - strh r0, [r5, 0x1A] - movs r0, 0x7 - strh r0, [r5, 0x10] - ldr r0, _080AEDAC @ =0x0000ffff - strh r0, [r5, 0x12] - movs r0, 0xC - strh r0, [r5, 0x1E] - subs r0, 0x4C - bl BattleAnimAdjustPanning - lsls r0, 24 - asrs r0, 24 - strh r0, [r5, 0x20] - movs r0, 0x3F - bl BattleAnimAdjustPanning - lsls r0, 24 - asrs r0, 24 - strh r0, [r5, 0x22] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x24] - movs r1, 0x22 - ldrsh r0, [r5, r1] - movs r2, 0x20 - ldrsh r1, [r5, r2] - subs r0, r1 - movs r1, 0x3 - bl __divsi3 - strh r0, [r5, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - b _080AEE6A - .align 2, 0 -_080AEDA4: .4byte gBattleAnimAttacker -_080AEDA8: .4byte gBattleAnimTarget -_080AEDAC: .4byte 0x0000ffff -_080AEDB0: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - cmp r0, 0 - ble _080AEDE0 - movs r0, 0 - strh r0, [r5, 0xA] - adds r0, r5, 0 - adds r1, r2, 0 - bl sub_80AEE74 - lsls r0, 24 - cmp r0, 0 - beq _080AEDE0 - movs r1, 0xC - ldrsh r0, [r5, r1] - cmp r0, 0x5 - bne _080AEDDA - movs r0, 0x3 - b _080AEDDE -_080AEDDA: - ldrh r0, [r5, 0x8] - adds r0, 0x1 -_080AEDDE: - strh r0, [r5, 0x8] -_080AEDE0: - ldrh r1, [r5, 0x1E] - movs r2, 0x1E - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _080AEE6C - b _080AEE62 -_080AEDEC: - ldrh r1, [r5, 0x1E] - movs r2, 0x1E - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _080AEDFA - subs r0, r1, 0x1 - strh r0, [r5, 0x1E] -_080AEDFA: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - movs r3, 0 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080AEE6C - strh r3, [r5, 0xA] - ldrh r1, [r5, 0xC] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _080AEE26 - movs r0, 0x4 - strh r0, [r5, 0x16] - movs r0, 0x44 - strh r0, [r5, 0x18] - strh r3, [r5, 0x10] - strh r2, [r5, 0x12] - b _080AEE36 -_080AEE26: - movs r0, 0x44 - strh r0, [r5, 0x16] - movs r0, 0x4 - strh r0, [r5, 0x18] - movs r0, 0x7 - strh r0, [r5, 0x10] - ldr r0, _080AEE44 @ =0x0000ffff - strh r0, [r5, 0x12] -_080AEE36: - movs r1, 0x1E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080AEE68 - movs r0, 0x4 - b _080AEE6A - .align 2, 0 -_080AEE44: .4byte 0x0000ffff -_080AEE48: - movs r1, 0xE - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080AEE6C - adds r0, r2, 0 - bl DestroyAnimVisualTask - b _080AEE6C -_080AEE58: - ldrh r1, [r5, 0x1E] - movs r2, 0x1E - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _080AEE68 -_080AEE62: - subs r0, r1, 0x1 - strh r0, [r5, 0x1E] - b _080AEE6C -_080AEE68: - movs r0, 0x1 -_080AEE6A: - strh r0, [r5, 0x8] -_080AEE6C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80AECE0 - - thumb_func_start sub_80AEE74 -sub_80AEE74: @ 80AEE74 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _080AEF3C @ =gUnknown_83E62A8 - movs r2, 0x14 - ldrsh r1, [r4, r2] - movs r3, 0x16 - ldrsh r2, [r4, r3] - movs r3, 0x23 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080AEEE0 - ldr r1, _080AEF40 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r3, r0, r1 - ldrh r2, [r3, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - ldrh r6, [r4, 0x10] - adds r1, r6 - ldr r6, _080AEF44 @ =0x000003ff - adds r0, r6, 0 - ands r1, r0 - ldr r0, _080AEF48 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r4, 0x12] - ldrh r1, [r4, 0x10] - adds r0, r1 - strh r0, [r4, 0x10] - lsls r0, 16 - cmp r0, 0 - bge _080AEEC8 - movs r0, 0x7 - strh r0, [r4, 0x10] -_080AEEC8: - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r0, 0x7 - ble _080AEED4 - movs r0, 0 - strh r0, [r4, 0x10] -_080AEED4: - strh r5, [r3, 0x3A] - movs r0, 0x3 - strh r0, [r3, 0x3C] - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] -_080AEEE0: - movs r3, 0x10 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _080AEF02 - movs r5, 0x12 - ldrsh r0, [r4, r5] - cmp r0, 0 - ble _080AEF02 - ldrh r1, [r4, 0x26] - ldrh r6, [r4, 0x24] - adds r1, r6 - strh r1, [r4, 0x24] - lsls r1, 24 - asrs r1, 24 - movs r0, 0x6F - bl PlaySE12WithPanning -_080AEF02: - movs r0, 0x12 - ldrsh r3, [r4, r0] - ldrh r2, [r4, 0x16] - cmp r3, 0 - bge _080AEF18 - lsls r0, r2, 16 - asrs r0, 16 - movs r5, 0x18 - ldrsh r1, [r4, r5] - cmp r0, r1 - ble _080AEF28 -_080AEF18: - cmp r3, 0 - ble _080AEF4C - lsls r0, r2, 16 - asrs r0, 16 - movs r6, 0x18 - ldrsh r1, [r4, r6] - cmp r0, r1 - blt _080AEF4C -_080AEF28: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x1A] - ldrh r1, [r4, 0x14] - adds r0, r1 - strh r0, [r4, 0x14] - movs r0, 0x1 - b _080AEF58 - .align 2, 0 -_080AEF3C: .4byte gUnknown_83E62A8 -_080AEF40: .4byte gSprites -_080AEF44: .4byte 0x000003ff -_080AEF48: .4byte 0xfffffc00 -_080AEF4C: - movs r3, 0x12 - ldrsh r0, [r4, r3] - lsls r0, 3 - adds r0, r2, r0 - strh r0, [r4, 0x16] - movs r0, 0 -_080AEF58: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80AEE74 - - thumb_func_start sub_80AEF60 -sub_80AEF60: @ 80AEF60 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - ble _080AEF96 - ldr r3, _080AEF9C @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - adds r0, r4, 0 - bl DestroySprite -_080AEF96: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AEF9C: .4byte gTasks - thumb_func_end sub_80AEF60 - - thumb_func_start sub_80AEFA0 -sub_80AEFA0: @ 80AEFA0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080AEFC4 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080AF01C - cmp r0, 0x1 - bgt _080AEFC8 - cmp r0, 0 - beq _080AEFCE - b _080AF052 - .align 2, 0 -_080AEFC4: .4byte gTasks -_080AEFC8: - cmp r0, 0x2 - beq _080AF044 - b _080AF052 -_080AEFCE: - ldr r0, _080AF018 @ =gBattleAnimTarget - ldrb r0, [r0] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x20 - strh r0, [r5, 0x26] - strh r0, [r5, 0x24] - cmp r0, 0x10 - ble _080AEFF8 - adds r2, r0, 0 -_080AEFE8: - adds r1, r2, 0 - subs r1, 0x20 - adds r2, r1, 0 - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x10 - bgt _080AEFE8 - strh r1, [r5, 0x24] -_080AEFF8: - ldr r4, _080AF018 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldrb r0, [r4] - bl GetBattlerSpriteSubpriority - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x2 - strh r0, [r5, 0x20] - b _080AF03C - .align 2, 0 -_080AF018: .4byte gBattleAnimTarget -_080AF01C: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AF052 - movs r0, 0 - strh r0, [r5, 0xA] - adds r0, r5, 0 - adds r1, r2, 0 - bl sub_80AF058 - lsls r0, 24 - cmp r0, 0 - beq _080AF052 -_080AF03C: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080AF052 -_080AF044: - movs r1, 0x1C - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080AF052 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080AF052: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80AEFA0 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/fighting.s b/asm/fighting.s deleted file mode 100644 index 89168ced6..000000000 --- a/asm/fighting.s +++ /dev/null @@ -1,1746 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start unc_080B08A0 -unc_080B08A0: @ 80B08A0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B08D0 @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl SetAnimSpriteInitialXOffset - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - movs r0, 0xF - strh r0, [r4, 0x2E] - ldr r0, _080B08D4 @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080B08D8 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B08D0: .4byte gBattleAnimArgs -_080B08D4: .4byte WaitAnimForDuration -_080B08D8: .4byte DestroyAnimSprite - thumb_func_end unc_080B08A0 - - thumb_func_start sub_80B08DC -sub_80B08DC: @ 80B08DC - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B0920 @ =gBattleAnimArgs - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080B0904 - ldr r0, _080B0924 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B0904 - ldrh r0, [r4, 0x2] - negs r0, r0 - strh r0, [r4, 0x2] - ldrh r0, [r4, 0x6] - negs r0, r0 - strh r0, [r4, 0x6] -_080B0904: - ldr r4, _080B0920 @ =gBattleAnimArgs - ldrb r1, [r4, 0xC] - adds r0, r5, 0 - bl StartSpriteAnim - movs r0, 0 - strh r0, [r4, 0xC] - adds r0, r5, 0 - bl sub_8075F0C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0920: .4byte gBattleAnimArgs -_080B0924: .4byte gBattleAnimAttacker - thumb_func_end sub_80B08DC - - thumb_func_start sub_80B0928 -sub_80B0928: @ 80B0928 - push {r4,lr} - adds r4, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B0944 - ldr r0, _080B0950 @ =gBattleAnimArgs - ldrh r1, [r0, 0x2] - negs r1, r1 - strh r1, [r0, 0x2] - ldrh r1, [r0, 0x6] - negs r1, r1 - strh r1, [r0, 0x6] -_080B0944: - adds r0, r4, 0 - bl sub_80B08DC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0950: .4byte gBattleAnimArgs - thumb_func_end sub_80B0928 - - thumb_func_start sub_80B0954 -sub_80B0954: @ 80B0954 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B0974 @ =gBattleAnimArgs - ldrb r1, [r4, 0x8] - bl StartSpriteAnim - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B0978 - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - b _080B0980 - .align 2, 0 -_080B0974: .4byte gBattleAnimArgs -_080B0978: - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget -_080B0980: - ldr r0, _080B0998 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r5, 0x2E] - ldr r0, _080B099C @ =WaitAnimForDuration - str r0, [r5, 0x1C] - ldr r1, _080B09A0 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0998: .4byte gBattleAnimArgs -_080B099C: .4byte WaitAnimForDuration -_080B09A0: .4byte DestroyAnimSprite - thumb_func_end sub_80B0954 - - thumb_func_start sub_80B09A4 -sub_80B09A4: @ 80B09A4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - ldr r0, _080B09C0 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r1, [r0, r2] - mov r9, r0 - cmp r1, 0 - bne _080B09C8 - ldr r0, _080B09C4 @ =gBattleAnimAttacker - b _080B09CA - .align 2, 0 -_080B09C0: .4byte gBattleAnimArgs -_080B09C4: .4byte gBattleAnimAttacker -_080B09C8: - ldr r0, _080B0B10 @ =gBattleAnimTarget -_080B09CA: - ldrb r0, [r0] - mov r8, r0 - mov r4, r9 - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0 - bge _080B09E8 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - strh r0, [r4, 0x4] -_080B09E8: - ldrb r1, [r4, 0x4] - adds r0, r5, 0 - bl StartSpriteAnim - mov r0, r8 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - mov r0, r8 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - mov r0, r8 - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r1, r0, 16 - lsrs r0, 31 - adds r1, r0 - lsls r1, 15 - lsrs r6, r1, 16 - mov r0, r8 - movs r1, 0 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _080B0A32 - adds r0, 0x3 -_080B0A32: - lsls r4, r0, 14 - lsrs r4, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - lsls r1, r6, 16 - asrs r1, 16 - bl __modsi3 - lsls r0, 16 - lsrs r6, r0, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - lsls r4, 16 - asrs r4, 16 - adds r1, r4, 0 - bl __modsi3 - lsls r0, 16 - lsrs r4, r0, 16 - bl Random - movs r7, 0x1 - adds r1, r7, 0 - ands r1, r0 - cmp r1, 0 - beq _080B0A74 - lsls r0, r6, 16 - negs r0, r0 - lsrs r6, r0, 16 -_080B0A74: - bl Random - adds r1, r7, 0 - ands r1, r0 - cmp r1, 0 - beq _080B0A86 - lsls r0, r4, 16 - negs r0, r0 - lsrs r4, r0, 16 -_080B0A86: - ldr r0, _080B0B14 @ =gBattlerPositions - add r0, r8 - ldrb r1, [r0] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _080B0A9C - lsls r0, r4, 16 - ldr r1, _080B0B18 @ =0xfff00000 - adds r0, r1 - lsrs r4, r0, 16 -_080B0A9C: - lsls r0, r6, 16 - asrs r0, 16 - ldrh r2, [r5, 0x20] - adds r0, r2 - strh r0, [r5, 0x20] - lsls r0, r4, 16 - asrs r0, 16 - ldrh r3, [r5, 0x22] - adds r0, r3 - strh r0, [r5, 0x22] - mov r1, r9 - ldrh r0, [r1, 0x2] - strh r0, [r5, 0x2E] - ldr r0, _080B0B1C @ =gBasicHitSplatSpriteTemplate - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r3, 0x22 - ldrsh r2, [r5, r3] - adds r3, r5, 0 - adds r3, 0x43 - ldrb r3, [r3] - adds r3, 0x1 - lsls r3, 24 - lsrs r3, 24 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x3C] - cmp r0, 0x40 - beq _080B0B00 - movs r0, 0x3C - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080B0B20 @ =gSprites - adds r0, r4 - movs r1, 0 - bl StartSpriteAffineAnim - movs r2, 0x3C - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _080B0B24 @ =SpriteCallbackDummy - str r1, [r0] -_080B0B00: - ldr r0, _080B0B28 @ =sub_80B0B2C - str r0, [r5, 0x1C] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B0B10: .4byte gBattleAnimTarget -_080B0B14: .4byte gBattlerPositions -_080B0B18: .4byte 0xfff00000 -_080B0B1C: .4byte gBasicHitSplatSpriteTemplate -_080B0B20: .4byte gSprites -_080B0B24: .4byte SpriteCallbackDummy -_080B0B28: .4byte sub_80B0B2C - thumb_func_end sub_80B09A4 - - thumb_func_start sub_80B0B2C -sub_80B0B2C: @ 80B0B2C - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0x2E] - movs r2, 0x2E - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _080B0B74 - movs r1, 0x3C - ldrsh r0, [r5, r1] - cmp r0, 0x40 - beq _080B0B68 - ldr r4, _080B0B70 @ =gSprites - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - movs r0, 0x3C - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite -_080B0B68: - adds r0, r5, 0 - bl DestroyAnimSprite - b _080B0B78 - .align 2, 0 -_080B0B70: .4byte gSprites -_080B0B74: - subs r0, r1, 0x1 - strh r0, [r5, 0x2E] -_080B0B78: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B0B2C - - thumb_func_start sub_80B0B80 -sub_80B0B80: @ 80B0B80 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - movs r0, 0x1E - strh r0, [r4, 0x2E] - ldr r0, _080B0BA0 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B0BA4 - ldrh r0, [r4, 0x20] - subs r0, 0x14 - strh r0, [r4, 0x32] - b _080B0BB6 - .align 2, 0 -_080B0BA0: .4byte gBattleAnimArgs -_080B0BA4: - ldrh r0, [r4, 0x20] - adds r0, 0x14 - strh r0, [r4, 0x32] - adds r2, r4, 0 - adds r2, 0x3F - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] -_080B0BB6: - ldrh r0, [r4, 0x22] - subs r0, 0x14 - strh r0, [r4, 0x36] - ldr r0, _080B0BD0 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - ldr r1, _080B0BD4 @ =sub_80B0BD8 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0BD0: .4byte StartAnimLinearTranslation -_080B0BD4: .4byte sub_80B0BD8 - thumb_func_end sub_80B0B80 - - thumb_func_start sub_80B0BD8 -sub_80B0BD8: @ 80B0BD8 - push {r4-r6,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x38] - adds r0, 0x1 - movs r6, 0 - strh r0, [r5, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xB - bne _080B0C18 - ldrh r2, [r5, 0x20] - ldrh r4, [r5, 0x24] - subs r0, r2, r4 - strh r0, [r5, 0x32] - ldrh r1, [r5, 0x22] - ldrh r3, [r5, 0x26] - subs r0, r1, r3 - strh r0, [r5, 0x36] - movs r0, 0x8 - strh r0, [r5, 0x2E] - adds r2, r4 - strh r2, [r5, 0x20] - adds r1, r3 - strh r1, [r5, 0x22] - strh r6, [r5, 0x26] - strh r6, [r5, 0x24] - ldr r0, _080B0C20 @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _080B0C24 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 -_080B0C18: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B0C20: .4byte StartAnimLinearTranslation -_080B0C24: .4byte DestroyAnimSprite - thumb_func_end sub_80B0BD8 - - thumb_func_start sub_80B0C28 -sub_80B0C28: @ 80B0C28 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r0, _080B0CA4 @ =gBattleAnimAttacker - ldrb r1, [r0] - movs r0, 0x2 - ldr r2, _080B0CA8 @ =gBattleAnimTarget - eors r0, r1 - ldrb r1, [r2] - cmp r0, r1 - bne _080B0C54 - ldrb r0, [r2] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080B0C54 - ldr r1, _080B0CAC @ =gBattleAnimArgs - movs r2, 0 - ldrsh r0, [r1, r2] - negs r0, r0 - strh r0, [r1] -_080B0C54: - adds r0, r6, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r0, _080B0CA4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B0C72 - ldr r1, _080B0CAC @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080B0C72: - ldr r4, _080B0CAC @ =gBattleAnimArgs - ldrh r0, [r4, 0x6] - movs r5, 0 - strh r0, [r6, 0x2E] - ldrh r0, [r6, 0x20] - strh r0, [r6, 0x30] - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrh r0, [r6, 0x22] - strh r0, [r6, 0x34] - strh r0, [r6, 0x36] - adds r0, r6, 0 - bl InitAnimLinearTranslation - ldrh r0, [r4, 0xA] - strh r0, [r6, 0x38] - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x3A] - strh r5, [r6, 0x3C] - ldr r0, _080B0CB0 @ =sub_80B0CB4 - str r0, [r6, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B0CA4: .4byte gBattleAnimAttacker -_080B0CA8: .4byte gBattleAnimTarget -_080B0CAC: .4byte gBattleAnimArgs -_080B0CB0: .4byte sub_80B0CB4 - thumb_func_end sub_80B0C28 - - thumb_func_start sub_80B0CB4 -sub_80B0CB4: @ 80B0CB4 - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - bne _080B0CE0 - ldrh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - ldrh r2, [r4, 0x3C] - adds r0, r2 - strh r0, [r4, 0x3C] - b _080B0CE6 -_080B0CE0: - adds r0, r4, 0 - bl DestroyAnimSprite -_080B0CE6: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B0CB4 - - thumb_func_start sub_80B0CEC -sub_80B0CEC: @ 80B0CEC - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r5, _080B0D18 @ =gBattleAnimArgs - ldrb r1, [r5, 0x4] - adds r0, r4, 0 - bl StartSpriteAnim - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x2E] - ldr r0, _080B0D1C @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080B0D20 @ =sub_80B0D24 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0D18: .4byte gBattleAnimArgs -_080B0D1C: .4byte WaitAnimForDuration -_080B0D20: .4byte sub_80B0D24 - thumb_func_end sub_80B0CEC - - thumb_func_start sub_80B0D24 -sub_80B0D24: @ 80B0D24 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0 - bl StartSpriteAffineAnim - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x14 - strh r0, [r4, 0x2E] - ldr r0, _080B0D50 @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080B0D54 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0D50: .4byte WaitAnimForDuration -_080B0D54: .4byte DestroyAnimSprite - thumb_func_end sub_80B0D24 - - thumb_func_start sub_80B0D58 -sub_80B0D58: @ 80B0D58 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r0, _080B0D74 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - ldr r0, _080B0D78 @ =sub_80B0D7C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B0D74: .4byte gBattleAnimArgs -_080B0D78: .4byte sub_80B0D7C - thumb_func_end sub_80B0D58 - - thumb_func_start sub_80B0D7C -sub_80B0D7C: @ 80B0D7C - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x2E] - subs r0, 0x1 - strh r0, [r5, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B0DC0 - movs r0, 0x6 - strh r0, [r5, 0x2E] - ldr r4, _080B0DC8 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - ldr r0, _080B0DCC @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _080B0DD0 @ =sub_80B0DD4 - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 -_080B0DC0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0DC8: .4byte gBattleAnimTarget -_080B0DCC: .4byte StartAnimLinearTranslation -_080B0DD0: .4byte sub_80B0DD4 - thumb_func_end sub_80B0D7C - - thumb_func_start sub_80B0DD4 -sub_80B0DD4: @ 80B0DD4 - push {lr} - movs r1, 0xF - strh r1, [r0, 0x2E] - ldr r1, _080B0DE8 @ =WaitAnimForDuration - str r1, [r0, 0x1C] - ldr r1, _080B0DEC @ =DestroyAnimSprite - bl StoreSpriteCallbackInData6 - pop {r0} - bx r0 - .align 2, 0 -_080B0DE8: .4byte WaitAnimForDuration -_080B0DEC: .4byte DestroyAnimSprite - thumb_func_end sub_80B0DD4 - - thumb_func_start sub_80B0DF0 -sub_80B0DF0: @ 80B0DF0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B0E1C - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r1, _080B0E18 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080B0E78 - .align 2, 0 -_080B0E18: .4byte gBattleAnimArgs -_080B0E1C: - ldrh r0, [r4, 0x30] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - movs r1, 0x34 - ldrsh r0, [r4, r1] - movs r2, 0x32 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x34] - adds r0, 0x3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x34] - cmp r0, 0x64 - ble _080B0E6A - movs r0, 0x34 - ldrsh r1, [r4, r0] - lsrs r0, r1, 31 - adds r0, r1, r0 - asrs r0, 1 - lsls r0, 1 - subs r1, r0 - adds r3, r4, 0 - adds r3, 0x3E - movs r0, 0x1 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080B0E6A: - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0x78 - ble _080B0E78 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B0E78: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B0DF0 - - thumb_func_start sub_80B0E80 -sub_80B0E80: @ 80B0E80 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B0E94 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B0E9C - ldr r4, _080B0E98 @ =gBattleAnimAttacker - b _080B0E9E - .align 2, 0 -_080B0E94: .4byte gBattleAnimArgs -_080B0E98: .4byte gBattleAnimAttacker -_080B0E9C: - ldr r4, _080B0EE4 @ =gBattleAnimTarget -_080B0E9E: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r1, _080B0EE8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - ldrh r2, [r5, 0x20] - adds r0, r2 - movs r2, 0 - strh r0, [r5, 0x20] - ldrh r0, [r1, 0x4] - ldrh r3, [r5, 0x22] - adds r0, r3 - strh r0, [r5, 0x22] - strh r2, [r5, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x32] - strh r2, [r5, 0x34] - ldr r0, _080B0EEC @ =sub_80B0EF0 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B0EE4: .4byte gBattleAnimTarget -_080B0EE8: .4byte gBattleAnimArgs -_080B0EEC: .4byte sub_80B0EF0 - thumb_func_end sub_80B0E80 - - thumb_func_start sub_80B0EF0 -sub_80B0EF0: @ 80B0EF0 - push {lr} - adds r1, r0, 0 - movs r0, 0x2E - ldrsh r2, [r1, r0] - cmp r2, 0 - beq _080B0F02 - cmp r2, 0x1 - beq _080B0F26 - b _080B0F60 -_080B0F02: - ldrh r0, [r1, 0x30] - subs r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _080B0F60 - movs r2, 0x32 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080B0F1E - adds r0, r1, 0 - bl DestroyAnimSprite - b _080B0F60 -_080B0F1E: - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - b _080B0F60 -_080B0F26: - ldrh r0, [r1, 0x30] - adds r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B0F4E - movs r0, 0 - strh r0, [r1, 0x30] - ldrh r0, [r1, 0x34] - adds r0, 0x1 - strh r0, [r1, 0x34] - ands r0, r2 - lsls r0, 16 - cmp r0, 0 - beq _080B0F4A - movs r0, 0x2 - b _080B0F4C -_080B0F4A: - ldr r0, _080B0F64 @ =0x0000fffe -_080B0F4C: - strh r0, [r1, 0x24] -_080B0F4E: - ldrh r0, [r1, 0x32] - subs r0, 0x1 - strh r0, [r1, 0x32] - lsls r0, 16 - cmp r0, 0 - bne _080B0F60 - adds r0, r1, 0 - bl DestroyAnimSprite -_080B0F60: - pop {r0} - bx r0 - .align 2, 0 -_080B0F64: .4byte 0x0000fffe - thumb_func_end sub_80B0EF0 - - thumb_func_start sub_80B0F68 -sub_80B0F68: @ 80B0F68 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080B0F8C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080B0F94 - ldr r4, _080B0F90 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r2, [r6, 0x4] - adds r0, r2 - b _080B0FA6 - .align 2, 0 -_080B0F8C: .4byte gBattleAnimArgs -_080B0F90: .4byte gBattleAnimAttacker -_080B0F94: - ldr r4, _080B0FF0 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x4] - adds r0, r1 -_080B0FA6: - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x6] - adds r0, r6 - strh r0, [r5, 0x22] - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - ldr r3, _080B0FF4 @ =gBattleAnimArgs - movs r4, 0x2 - ldrsh r0, [r3, r4] - lsls r0, 4 - adds r1, r0 - ldr r4, _080B0FF8 @ =0x000003ff - adds r0, r4, 0 - ands r1, r0 - ldr r0, _080B0FFC @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - movs r1, 0 - movs r0, 0 - strh r0, [r5, 0x2E] - movs r2, 0x2 - ldrsh r0, [r3, r2] - cmp r0, 0x1 - beq _080B1014 - cmp r0, 0x1 - bgt _080B1000 - cmp r0, 0 - beq _080B100A - b _080B103A - .align 2, 0 -_080B0FF0: .4byte gBattleAnimTarget -_080B0FF4: .4byte gBattleAnimArgs -_080B0FF8: .4byte 0x000003ff -_080B0FFC: .4byte 0xfffffc00 -_080B1000: - cmp r0, 0x2 - beq _080B1024 - cmp r0, 0x3 - beq _080B1034 - b _080B103A -_080B100A: - ldr r0, _080B1010 @ =0x0000fffd - b _080B1034 - .align 2, 0 -_080B1010: .4byte 0x0000fffd -_080B1014: - movs r0, 0x3 - strh r0, [r5, 0x3A] - ldr r0, _080B1020 @ =0x0000fffd - strh r0, [r5, 0x3C] - b _080B1042 - .align 2, 0 -_080B1020: .4byte 0x0000fffd -_080B1024: - ldr r0, _080B1030 @ =0x0000fffd - strh r0, [r5, 0x3A] - movs r0, 0x3 - strh r0, [r5, 0x3C] - b _080B1042 - .align 2, 0 -_080B1030: .4byte 0x0000fffd -_080B1034: - strh r0, [r5, 0x3A] - strh r0, [r5, 0x3C] - b _080B1042 -_080B103A: - adds r0, r5, 0 - bl DestroyAnimSprite - b _080B1046 -_080B1042: - ldr r0, _080B104C @ =sub_80B1050 - str r0, [r5, 0x1C] -_080B1046: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B104C: .4byte sub_80B1050 - thumb_func_end sub_80B0F68 - - thumb_func_start sub_80B1050 -sub_80B1050: @ 80B1050 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x3A] - ldrh r2, [r1, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r1, 0x3C] - ldrh r2, [r1, 0x22] - adds r0, r2 - strh r0, [r1, 0x22] - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x28 - ble _080B1078 - adds r0, r1, 0 - bl DestroyAnimSprite -_080B1078: - pop {r0} - bx r0 - thumb_func_end sub_80B1050 - - thumb_func_start sub_80B107C -sub_80B107C: @ 80B107C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B10C8 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B10D8 - ldr r4, _080B10CC @ =gBattlerAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r0, _080B10D0 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - ldr r0, _080B10D4 @ =gBattleAnimTarget - b _080B10F4 - .align 2, 0 -_080B10C8: .4byte gBattleAnimArgs -_080B10CC: .4byte gBattlerAttacker -_080B10D0: .4byte gBattleAnimAttacker -_080B10D4: .4byte gBattleAnimTarget -_080B10D8: - ldr r0, _080B1110 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - ldr r0, _080B1114 @ =gBattleAnimAttacker -_080B10F4: - ldrb r0, [r0] - strh r0, [r5, 0x3C] - movs r0, 0 - strh r0, [r5, 0x2E] - movs r0, 0xC - strh r0, [r5, 0x30] - movs r0, 0x8 - strh r0, [r5, 0x32] - ldr r0, _080B1118 @ =sub_80B111C - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1110: .4byte gBattleAnimTarget -_080B1114: .4byte gBattleAnimAttacker -_080B1118: .4byte sub_80B111C - thumb_func_end sub_80B107C - - thumb_func_start sub_80B111C -sub_80B111C: @ 80B111C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xB4 - bne _080B1178 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - adds r0, r4, 0 - bl InitAnimLinearTranslation - ldr r1, _080B1180 @ =DestroySpriteAndMatrix - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B1184 @ =sub_807563C - str r0, [r4, 0x1C] -_080B1178: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B1180: .4byte DestroySpriteAndMatrix -_080B1184: .4byte sub_807563C - thumb_func_end sub_80B111C - - thumb_func_start sub_80B1188 -sub_80B1188: @ 80B1188 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B11D4 @ =gBattleAnimArgs - ldrh r0, [r4] - strh r0, [r5, 0x20] - movs r2, 0x78 - strh r2, [r5, 0x22] - ldrh r0, [r4, 0x6] - strh r0, [r5, 0x2E] - adds r0, r5, 0 - adds r0, 0x36 - adds r1, r5, 0 - adds r1, 0x38 - lsls r2, 8 - bl StorePointerInVars - ldrh r0, [r4, 0x2] - strh r0, [r5, 0x3A] - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - movs r3, 0x4 - ldrsh r0, [r4, r3] - lsls r0, 2 - adds r1, r0 - ldr r3, _080B11D8 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080B11DC @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - ldr r0, _080B11E0 @ =sub_80B11E4 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B11D4: .4byte gBattleAnimArgs -_080B11D8: .4byte 0x000003ff -_080B11DC: .4byte 0xfffffc00 -_080B11E0: .4byte sub_80B11E4 - thumb_func_end sub_80B1188 - - thumb_func_start sub_80B11E4 -sub_80B11E4: @ 80B11E4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - movs r1, 0x2E - ldrsh r0, [r7, r1] - cmp r0, 0 - beq _080B1236 - movs r2, 0x36 - ldrsh r0, [r7, r2] - movs r2, 0x38 - ldrsh r1, [r7, r2] - bl LoadPointerFromVars - adds r4, r0, 0 - movs r1, 0x3A - ldrsh r0, [r7, r1] - subs r4, r0 - adds r0, r7, 0 - adds r0, 0x36 - adds r1, r7, 0 - adds r1, 0x38 - adds r2, r4, 0 - bl StorePointerInVars - asrs r4, 8 - strh r4, [r7, 0x22] - lsls r4, 16 - asrs r4, 16 - movs r0, 0x8 - negs r0, r0 - cmp r4, r0 - bge _080B122E - adds r0, r7, 0 - bl DestroyAnimSprite - b _080B128C -_080B122E: - ldrh r0, [r7, 0x2E] - subs r0, 0x1 - strh r0, [r7, 0x2E] - b _080B128C -_080B1236: - ldr r4, _080B1298 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r2, _080B129C @ =gBattleAnimTarget - mov r8, r2 - ldrb r0, [r2] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - subs r4, r6 - strh r4, [r7, 0x2E] - lsrs r0, 24 - subs r0, r5 - strh r0, [r7, 0x30] - ldrh r0, [r7, 0x20] - lsls r0, 4 - strh r0, [r7, 0x32] - ldrh r0, [r7, 0x22] - lsls r0, 4 - strh r0, [r7, 0x34] - ldr r0, _080B12A0 @ =sub_80B12A4 - str r0, [r7, 0x1C] -_080B128C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B1298: .4byte gBattleAnimAttacker -_080B129C: .4byte gBattleAnimTarget -_080B12A0: .4byte sub_80B12A4 - thumb_func_end sub_80B11E4 - - thumb_func_start sub_80B12A4 -sub_80B12A4: @ 80B12A4 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - ldrh r1, [r2, 0x30] - ldrh r3, [r2, 0x34] - adds r1, r3 - strh r1, [r2, 0x34] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r3, r1, 20 - strh r3, [r2, 0x22] - adds r0, 0x8 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 17 - cmp r0, r1 - bhi _080B12DE - adds r1, r3, 0 - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - blt _080B12DE - cmp r1, 0x78 - ble _080B12E4 -_080B12DE: - adds r0, r2, 0 - bl DestroyAnimSprite -_080B12E4: - pop {r0} - bx r0 - thumb_func_end sub_80B12A4 - - thumb_func_start sub_80B12E8 -sub_80B12E8: @ 80B12E8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B131C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B132C - ldr r4, _080B1320 @ =gBattlerAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r0, _080B1324 @ =gBattleAnimTarget - ldrb r4, [r0] - ldr r0, _080B1328 @ =gBattleAnimAttacker - b _080B1332 - .align 2, 0 -_080B131C: .4byte gBattleAnimArgs -_080B1320: .4byte gBattlerAttacker -_080B1324: .4byte gBattleAnimTarget -_080B1328: .4byte gBattleAnimAttacker -_080B132C: - ldr r0, _080B1364 @ =gBattleAnimAttacker - ldrb r4, [r0] - ldr r0, _080B1368 @ =gBattleAnimTarget -_080B1332: - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B136C - ldrb r2, [r5, 0x3] - lsls r1, r2, 26 - lsrs r1, 27 - movs r0, 0x8 - orrs r1, r0 - lsls r1, 1 - subs r0, 0x47 - b _080B1386 - .align 2, 0 -_080B1364: .4byte gBattleAnimAttacker -_080B1368: .4byte gBattleAnimTarget -_080B136C: - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B138C - ldrb r2, [r5, 0x3] - lsls r1, r2, 26 - lsrs r1, 27 - movs r0, 0x18 - orrs r1, r0 - lsls r1, 1 - subs r0, 0x57 -_080B1386: - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x3] -_080B138C: - movs r0, 0x10 - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - adds r0, r4, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - adds r0, r4, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimLinearTranslation - ldr r1, _080B13CC @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B13D0 @ =sub_807563C - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B13CC: .4byte DestroyAnimSprite -_080B13D0: .4byte sub_807563C - thumb_func_end sub_80B12E8 - - thumb_func_start sub_80B13D4 -sub_80B13D4: @ 80B13D4 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r1, [r4, r0] - movs r2, 0x36 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080B13EA - adds r0, r4, 0 - bl DestroyAnimSprite -_080B13EA: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B13D4 - - thumb_func_start sub_80B13F8 -sub_80B13F8: @ 80B13F8 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r4, _080B1474 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r1, _080B1478 @ =gBattleAnimArgs - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x30] - ldrh r0, [r1] - strh r0, [r5, 0x32] - ldrh r0, [r1, 0x2] - strh r0, [r5, 0x34] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x36] - ldr r0, _080B147C @ =gAnimMoveTurn - ldrb r6, [r0] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B1442 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080B1442: - movs r0, 0x1 - ands r6, r0 - cmp r6, 0 - beq _080B1456 - ldrh r0, [r5, 0x32] - negs r0, r0 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x30] - adds r0, 0x1 - strh r0, [r5, 0x30] -_080B1456: - ldrh r1, [r5, 0x30] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl StartSpriteAnim - ldrh r0, [r5, 0x32] - strh r0, [r5, 0x24] - ldrh r0, [r5, 0x34] - strh r0, [r5, 0x26] - ldr r0, _080B1480 @ =sub_80B13D4 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B1474: .4byte gBattleAnimTarget -_080B1478: .4byte gBattleAnimArgs -_080B147C: .4byte gAnimMoveTurn -_080B1480: .4byte sub_80B13D4 - thumb_func_end sub_80B13F8 - - thumb_func_start sub_80B1484 -sub_80B1484: @ 80B1484 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B149C @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B14A0 - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - b _080B14A8 - .align 2, 0 -_080B149C: .4byte gBattleAnimArgs -_080B14A0: - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget -_080B14A8: - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B14BC - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - b _080B14D2 -_080B14BC: - ldr r0, _080B14E4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B14D2 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080B14D2: - ldr r0, _080B14E8 @ =RunStoredCallbackWhenAnimEnds - str r0, [r4, 0x1C] - ldr r1, _080B14EC @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B14E4: .4byte gBattleAnimAttacker -_080B14E8: .4byte RunStoredCallbackWhenAnimEnds -_080B14EC: .4byte DestroyAnimSprite - thumb_func_end sub_80B1484 - - thumb_func_start sub_80B14F0 -sub_80B14F0: @ 80B14F0 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080B152A - ldrh r0, [r4, 0x30] - adds r0, 0x28 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x30] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x2 - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x28 - ble _080B152A - adds r0, r4, 0 - bl DestroyAnimSprite -_080B152A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B14F0 - - thumb_func_start sub_80B1530 -sub_80B1530: @ 80B1530 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _080B1560 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080B1568 - cmp r0, 0x1 - bgt _080B1582 - cmp r0, 0 - bne _080B1582 - movs r0, 0 - bl sub_8075458 - ldr r0, _080B1564 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x18] - b _080B157A - .align 2, 0 -_080B1560: .4byte gTasks -_080B1564: .4byte gBattleAnimArgs -_080B1568: - ldrh r0, [r4, 0x18] - subs r0, 0x1 - strh r0, [r4, 0x18] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B158E -_080B157A: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B158E -_080B1582: - movs r2, 0xA0 - lsls r2, 3 - adds r0, r2, 0 - ldrh r1, [r4, 0x1A] - adds r0, r1 - strh r0, [r4, 0x1A] -_080B158E: - movs r2, 0xB0 - lsls r2, 4 - adds r0, r2, 0 - ldrh r1, [r4, 0x1C] - adds r0, r1 - strh r0, [r4, 0x1C] - ldr r0, _080B15BC @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B15C4 - ldr r1, _080B15C0 @ =gBattle_BG3_X - ldrh r0, [r4, 0x1A] - lsls r0, 16 - asrs r0, 24 - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - adds r7, r1, 0 - b _080B15D4 - .align 2, 0 -_080B15BC: .4byte gBattleAnimTarget -_080B15C0: .4byte gBattle_BG3_X -_080B15C4: - ldr r2, _080B1614 @ =gBattle_BG3_X - ldrh r1, [r4, 0x1A] - lsls r1, 16 - asrs r1, 24 - ldrh r0, [r2] - subs r0, r1 - strh r0, [r2] - adds r7, r2, 0 -_080B15D4: - ldr r3, _080B1618 @ =gBattle_BG3_Y - ldrh r2, [r4, 0x1C] - lsls r0, r2, 16 - asrs r0, 24 - ldrh r1, [r3] - adds r0, r1 - strh r0, [r3] - movs r0, 0xFF - ldrb r1, [r4, 0x1A] - movs r5, 0 - strh r1, [r4, 0x1A] - ands r0, r2 - strh r0, [r4, 0x1C] - ldr r0, _080B161C @ =gBattleAnimArgs - movs r2, 0xE - ldrsh r1, [r0, r2] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080B160C - strh r5, [r7] - strh r5, [r3] - movs r0, 0x1 - bl sub_8075458 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080B160C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B1614: .4byte gBattle_BG3_X -_080B1618: .4byte gBattle_BG3_Y -_080B161C: .4byte gBattleAnimArgs - thumb_func_end sub_80B1530 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/fire.s b/asm/fire.s deleted file mode 100644 index efdfc8315..000000000 --- a/asm/fire.s +++ /dev/null @@ -1,2500 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80AC90C -sub_80AC90C: @ 80AC90C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080AC940 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x2E] - movs r0, 0x3C - strh r0, [r4, 0x30] - movs r0, 0x9 - strh r0, [r4, 0x32] - movs r0, 0x1E - strh r0, [r4, 0x34] - movs r0, 0xFE - lsls r0, 8 - strh r0, [r4, 0x36] - ldr r1, _080AC944 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r1, _080AC948 @ =TranslateSpriteInGrowingCircleOverDuration - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AC940: .4byte gBattleAnimArgs -_080AC944: .4byte DestroyAnimSprite -_080AC948: .4byte TranslateSpriteInGrowingCircleOverDuration - thumb_func_end sub_80AC90C - - thumb_func_start sub_80AC94C -sub_80AC94C: @ 80AC94C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080AC984 @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl SetAnimSpriteInitialXOffset - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r5, 0x8] - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x32] - ldr r0, _080AC988 @ =TranslateSpriteLinearFixedPoint - str r0, [r4, 0x1C] - ldr r1, _080AC98C @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AC984: .4byte gBattleAnimArgs -_080AC988: .4byte TranslateSpriteLinearFixedPoint -_080AC98C: .4byte DestroyAnimSprite - thumb_func_end sub_80AC94C - - thumb_func_start sub_80AC990 -sub_80AC990: @ 80AC990 - push {r4,lr} - adds r4, r0, 0 - bl SetSpriteCoordsToAnimAttackerCoords - ldr r0, _080AC9C4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AC9CC - ldr r2, _080AC9C8 @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r2, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r2, 0x8] - negs r0, r0 - strh r0, [r4, 0x32] - adds r1, r2, 0 - b _080AC9E2 - .align 2, 0 -_080AC9C4: .4byte gBattleAnimAttacker -_080AC9C8: .4byte gBattleAnimArgs -_080AC9CC: - ldr r1, _080AC9F8 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x32] -_080AC9E2: - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x36] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x34] - ldr r0, _080AC9FC @ =sub_80ACA6C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AC9F8: .4byte gBattleAnimArgs -_080AC9FC: .4byte sub_80ACA6C - thumb_func_end sub_80AC990 - - thumb_func_start sub_80ACA00 -sub_80ACA00: @ 80ACA00 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080ACA2C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080ACA34 - ldr r2, _080ACA30 @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r2, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r2, 0x8] - strh r0, [r4, 0x32] - adds r1, r2, 0 - b _080ACA4C - .align 2, 0 -_080ACA2C: .4byte gBattleAnimAttacker -_080ACA30: .4byte gBattleAnimArgs -_080ACA34: - ldr r1, _080ACA64 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x8] - negs r0, r0 - strh r0, [r4, 0x32] -_080ACA4C: - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x36] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x34] - ldr r0, _080ACA68 @ =sub_80ACA6C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACA64: .4byte gBattleAnimArgs -_080ACA68: .4byte sub_80ACA6C - thumb_func_end sub_80ACA00 - - thumb_func_start sub_80ACA6C -sub_80ACA6C: @ 80ACA6C - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x36 - ldrsh r1, [r2, r3] - cmp r0, r1 - bge _080ACA92 - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x34] - ldrh r3, [r2, 0x26] - adds r0, r3 - strh r0, [r2, 0x26] -_080ACA92: - movs r0, 0x2E - ldrsh r1, [r2, r0] - movs r3, 0x30 - ldrsh r0, [r2, r3] - cmp r1, r0 - bne _080ACAA4 - adds r0, r2, 0 - bl DestroySpriteAndMatrix -_080ACAA4: - pop {r0} - bx r0 - thumb_func_end sub_80ACA6C - - thumb_func_start sub_80ACAA8 -sub_80ACAA8: @ 80ACAA8 - push {r4,lr} - adds r4, r0, 0 - bl SetSpriteCoordsToAnimAttackerCoords - ldr r0, _080ACACC @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080ACAD4 - ldr r0, _080ACAD0 @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r2, [r0] - subs r1, r2 - strh r1, [r4, 0x20] - b _080ACAE6 - .align 2, 0 -_080ACACC: .4byte gBattleAnimAttacker -_080ACAD0: .4byte gBattleAnimArgs -_080ACAD4: - ldr r0, _080ACB14 @ =gBattleAnimArgs - ldrh r1, [r0] - ldrh r2, [r4, 0x20] - adds r1, r2 - strh r1, [r4, 0x20] - adds r2, r4, 0 - adds r2, 0x43 - movs r1, 0x8 - strb r1, [r2] -_080ACAE6: - adds r2, r0, 0 - ldrh r0, [r2, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x22] - ldrh r0, [r2, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r2, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r2, 0x8] - strh r0, [r4, 0x32] - ldrh r0, [r2, 0xA] - strh r0, [r4, 0x34] - ldrh r0, [r2, 0xC] - strh r0, [r4, 0x36] - strh r1, [r4, 0x38] - ldr r0, _080ACB18 @ =sub_80ACB1C - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACB14: .4byte gBattleAnimArgs -_080ACB18: .4byte sub_80ACB1C - thumb_func_end sub_80ACAA8 - - thumb_func_start sub_80ACB1C -sub_80ACB1C: @ 80ACB1C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080ACBA4 - movs r2, 0x38 - ldrsh r1, [r4, r2] - ldr r0, _080ACB88 @ =0x00002710 - cmp r1, r0 - ble _080ACB3A - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1 - strb r0, [r1] -_080ACB3A: - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - ldrh r0, [r4, 0x36] - ldrh r2, [r4, 0x38] - adds r0, r2 - strh r0, [r4, 0x38] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080ACB90 - ldr r2, _080ACB8C @ =0xffffff00 - b _080ACB98 - .align 2, 0 -_080ACB88: .4byte 0x00002710 -_080ACB8C: .4byte 0xffffff00 -_080ACB90: - cmp r0, 0 - bge _080ACB9C - movs r2, 0x80 - lsls r2, 1 -_080ACB98: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_080ACB9C: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _080ACBAA -_080ACBA4: - adds r0, r4, 0 - bl DestroySpriteAndMatrix -_080ACBAA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ACB1C - - thumb_func_start sub_80ACBB0 -sub_80ACBB0: @ 80ACBB0 - push {lr} - movs r1, 0 - strh r1, [r0, 0x20] - strh r1, [r0, 0x22] - movs r1, 0x3C - strh r1, [r0, 0x2E] - movs r1, 0x8C - strh r1, [r0, 0x32] - movs r1, 0x50 - strh r1, [r0, 0x36] - ldr r1, _080ACBD4 @ =StartAnimLinearTranslation - str r1, [r0, 0x1C] - ldr r1, _080ACBD8 @ =DestroyAnimSprite - bl StoreSpriteCallbackInData6 - pop {r0} - bx r0 - .align 2, 0 -_080ACBD4: .4byte StartAnimLinearTranslation -_080ACBD8: .4byte DestroyAnimSprite - thumb_func_end sub_80ACBB0 - - thumb_func_start sub_80ACBDC -sub_80ACBDC: @ 80ACBDC - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _080ACC34 @ =gBattleAnimAttacker - ldrb r0, [r5] - bl GetBattlerSide - adds r4, r0, 0 - ldr r0, _080ACC38 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080ACC22 - movs r0, 0x2 - bl GetBattlerAtPosition - ldrb r1, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - beq _080ACC1A - movs r0, 0x3 - bl GetBattlerAtPosition - ldrb r1, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - bne _080ACC22 -_080ACC1A: - ldr r1, _080ACC3C @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080ACC22: - ldr r1, _080ACC40 @ =sub_8075F0C - str r1, [r6, 0x1C] - adds r0, r6, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080ACC34: .4byte gBattleAnimAttacker -_080ACC38: .4byte gBattleAnimTarget -_080ACC3C: .4byte gBattleAnimArgs -_080ACC40: .4byte sub_8075F0C - thumb_func_end sub_80ACBDC - - thumb_func_start sub_80ACC44 -sub_80ACC44: @ 80ACC44 - ldr r2, _080ACC58 @ =gBattleAnimArgs - ldrh r1, [r2] - negs r1, r1 - strh r1, [r2] - ldrh r1, [r2, 0x4] - negs r1, r1 - strh r1, [r2, 0x4] - ldr r1, _080ACC5C @ =sub_8075F0C - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080ACC58: .4byte gBattleAnimArgs -_080ACC5C: .4byte sub_8075F0C - thumb_func_end sub_80ACC44 - - thumb_func_start sub_80ACC60 -sub_80ACC60: @ 80ACC60 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080ACC80 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - movs r1, 0 - strh r0, [r4, 0x3C] - strh r1, [r4, 0x2E] - ldr r0, _080ACC84 @ =sub_80ACC88 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACC80: .4byte gBattleAnimArgs -_080ACC84: .4byte sub_80ACC88 - thumb_func_end sub_80ACC60 - - thumb_func_start sub_80ACC88 -sub_80ACC88: @ 80ACC88 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80ACD7C - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x12 - bne _080ACCD2 - movs r0, 0x19 - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldr r4, _080ACCD8 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimLinearTranslation - ldr r0, _080ACCDC @ =sub_80ACCE0 - str r0, [r5, 0x1C] -_080ACCD2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ACCD8: .4byte gBattleAnimTarget -_080ACCDC: .4byte sub_80ACCE0 - thumb_func_end sub_80ACC88 - - thumb_func_start sub_80ACCE0 -sub_80ACCE0: @ 80ACCE0 - push {r4-r6,lr} - adds r6, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080ACD28 - movs r4, 0 - strh r4, [r6, 0x2E] - ldr r5, _080ACD20 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x22] - strh r4, [r6, 0x26] - strh r4, [r6, 0x24] - ldr r1, _080ACD24 @ =sub_80ACD58 - str r1, [r6, 0x1C] - adds r0, r6, 0 - bl _call_via_r1 - b _080ACD52 - .align 2, 0 -_080ACD20: .4byte gBattleAnimTarget -_080ACD24: .4byte sub_80ACD58 -_080ACD28: - movs r1, 0x3C - ldrsh r0, [r6, r1] - movs r1, 0x1C - bl Sin - ldrh r1, [r6, 0x24] - adds r0, r1 - strh r0, [r6, 0x24] - movs r1, 0x3C - ldrsh r0, [r6, r1] - movs r1, 0x1C - bl Cos - ldrh r1, [r6, 0x26] - adds r0, r1 - strh r0, [r6, 0x26] - ldrh r0, [r6, 0x3C] - adds r0, 0x14 - movs r1, 0xFF - ands r0, r1 - strh r0, [r6, 0x3C] -_080ACD52: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80ACCE0 - - thumb_func_start sub_80ACD58 -sub_80ACD58: @ 80ACD58 - push {r4,lr} - adds r4, r0, 0 - bl sub_80ACD7C - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _080ACD74 - adds r0, r4, 0 - bl DestroyAnimSprite -_080ACD74: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ACD58 - - thumb_func_start sub_80ACD7C -sub_80ACD7C: @ 80ACD7C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r1, 0x1C - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r1, 0x1C - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3C] - adds r0, 0x14 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ACD7C - - thumb_func_start sub_80ACDA8 -sub_80ACDA8: @ 80ACDA8 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080ACDDC @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x32] - ldr r1, _080ACDE0 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080ACDE4 @ =TranslateSpriteLinear - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACDDC: .4byte gBattleAnimArgs -_080ACDE0: .4byte DestroyAnimSprite -_080ACDE4: .4byte TranslateSpriteLinear - thumb_func_end sub_80ACDA8 - - thumb_func_start sub_80ACDE8 -sub_80ACDE8: @ 80ACDE8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r1, _080ACE1C @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x2E] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080ACE20 @ =WaitAnimForDuration - str r0, [r4, 0x1C] - ldr r1, _080ACE24 @ =sub_80ACE28 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ACE1C: .4byte gBattleAnimArgs -_080ACE20: .4byte WaitAnimForDuration -_080ACE24: .4byte sub_80ACE28 - thumb_func_end sub_80ACDE8 - - thumb_func_start sub_80ACE28 -sub_80ACE28: @ 80ACE28 - push {lr} - adds r3, r0, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r3] - ldrh r1, [r0, 0x30] - movs r2, 0 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - ldr r1, _080ACE4C @ =sub_80ACE50 - str r1, [r0, 0x1C] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080ACE4C: .4byte sub_80ACE50 - thumb_func_end sub_80ACE28 - - thumb_func_start sub_80ACE50 -sub_80ACE50: @ 80ACE50 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x32] - lsls r1, 16 - asrs r1, 24 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x32] - lsls r1, 16 - asrs r1, 24 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - adds r0, 0xA - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x32] - adds r0, 0xD0 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080ACE9C - adds r0, r4, 0 - bl DestroyAnimSprite -_080ACE9C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ACE50 - - thumb_func_start sub_80ACEA4 -sub_80ACEA4: @ 80ACEA4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080ACF04 @ =gTasks - adds r4, r0 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - strh r0, [r4, 0x26] - strh r5, [r4, 0x8] - strh r5, [r4, 0xA] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - ldr r2, _080ACF08 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x22] - strh r0, [r4, 0x10] - ldr r0, _080ACF0C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x12] - strh r5, [r4, 0x14] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl PrepareBattlerSpriteForRotScale - ldr r0, _080ACF10 @ =sub_80ACF14 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080ACF04: .4byte gTasks -_080ACF08: .4byte gSprites -_080ACF0C: .4byte gBattleAnimAttacker -_080ACF10: .4byte sub_80ACF14 - thumb_func_end sub_80ACEA4 - - thumb_func_start sub_80ACF14 -sub_80ACF14: @ 80ACF14 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080ACF3C @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x6 - bls _080ACF30 - b _080AD1EE -_080ACF30: - lsls r0, 2 - ldr r1, _080ACF40 @ =_080ACF44 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ACF3C: .4byte gTasks -_080ACF40: .4byte _080ACF44 - .align 2, 0 -_080ACF44: - .4byte _080ACF60 - .4byte _080ACF86 - .4byte _080AD038 - .4byte _080AD098 - .4byte _080AD0B6 - .4byte _080AD18C - .4byte _080AD1E0 -_080ACF60: - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r3, 0x80 - lsls r3, 1 - movs r0, 0xE0 - str r0, [sp] - movs r0, 0x80 - lsls r0, 2 - str r0, [sp, 0x4] - movs r0, 0x20 - str r0, [sp, 0x8] - adds r0, r4, 0 - adds r2, r3, 0 - bl sub_80765D4 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080ACF86: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080ACFCE - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080ACFBC - ldr r2, _080ACFB8 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x3 - b _080ACFCC - .align 2, 0 -_080ACFB8: .4byte gSprites -_080ACFBC: - ldr r2, _080AD030 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _080AD034 @ =0x0000fffd -_080ACFCC: - strh r1, [r0, 0x24] -_080ACFCE: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080ACFFC - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080ACFFC - movs r0, 0 - strh r0, [r4, 0xE] - ldr r2, _080AD030 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - adds r1, 0x1 - strh r1, [r0, 0x22] -_080ACFFC: - adds r0, r4, 0 - bl sub_8076640 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _080AD00C - b _080AD1EE -_080AD00C: - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl SetBattlerSpriteYOffsetFromYScale - ldr r2, _080AD030 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r5, [r0, 0x24] - strh r5, [r4, 0xA] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - b _080AD1D4 - .align 2, 0 -_080AD030: .4byte gSprites -_080AD034: .4byte 0x0000fffd -_080AD038: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bgt _080AD048 - b _080AD1EE -_080AD048: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080AD072 - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r3, 0x80 - lsls r3, 2 - movs r0, 0xC0 - lsls r0, 1 - str r0, [sp] - movs r0, 0xF0 - str r0, [sp, 0x4] - movs r0, 0x6 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r2, 0xE0 - bl sub_80765D4 - b _080AD092 -_080AD072: - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r3, 0x80 - lsls r3, 2 - movs r0, 0xC0 - lsls r0, 1 - str r0, [sp] - movs r0, 0xC0 - str r0, [sp, 0x4] - movs r0, 0x6 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r2, 0xE0 - bl sub_80765D4 -_080AD092: - movs r0, 0 - strh r0, [r4, 0xA] - b _080AD1D4 -_080AD098: - adds r0, r4, 0 - bl sub_8076640 - lsls r0, 24 - cmp r0, 0 - beq _080AD0A6 - b _080AD1EE -_080AD0A6: - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - adds r1, r5, 0 - movs r2, 0x6 - bl sub_80AD1F8 - b _080AD1D4 -_080AD0B6: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AD104 - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080AD0F0 - ldr r2, _080AD0EC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - adds r1, 0x3 - b _080AD102 - .align 2, 0 -_080AD0EC: .4byte gSprites -_080AD0F0: - ldr r2, _080AD13C @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - subs r1, 0x3 -_080AD102: - strh r1, [r0, 0x26] -_080AD104: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x18 - ble _080AD1EE - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080AD140 - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r2, 0xC0 - lsls r2, 1 - movs r0, 0x80 - lsls r0, 1 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x8 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r3, 0xF0 - bl sub_80765D4 - b _080AD15E - .align 2, 0 -_080AD13C: .4byte gSprites -_080AD140: - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r2, 0xC0 - lsls r2, 1 - movs r0, 0x80 - lsls r0, 1 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x8 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r3, 0xC0 - bl sub_80765D4 -_080AD15E: - ldrh r1, [r4, 0xC] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080AD17C - ldr r2, _080AD188 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - subs r1, 0x3 - strh r1, [r0, 0x26] -_080AD17C: - movs r0, 0 - strh r0, [r4, 0xA] - strh r0, [r4, 0xC] - strh r0, [r4, 0xE] - b _080AD1D4 - .align 2, 0 -_080AD188: .4byte gSprites -_080AD18C: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080AD1A8 - ldr r2, _080AD1DC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x1 - strh r1, [r0, 0x22] -_080AD1A8: - adds r0, r4, 0 - bl sub_8076640 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080AD1EE - ldr r2, _080AD1DC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x10] - strh r1, [r0, 0x22] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl ResetSpriteRotScale - strh r5, [r4, 0xC] -_080AD1D4: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080AD1EE - .align 2, 0 -_080AD1DC: .4byte gSprites -_080AD1E0: - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080AD1EE - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080AD1EE: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80ACF14 - - thumb_func_start sub_80AD1F8 -sub_80AD1F8: @ 80AD1F8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - adds r0, r4, 0 - bl sub_80AD374 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - ldr r1, _080AD248 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r4, [r0, 0x20] - ldr r0, _080AD24C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AD250 - adds r0, r4, 0 - subs r0, 0xC - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x1 - b _080AD25A - .align 2, 0 -_080AD248: .4byte gSprites -_080AD24C: .4byte gBattleAnimAttacker -_080AD250: - adds r0, r4, 0 - adds r0, 0x10 - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0xFF -_080AD25A: - movs r6, 0 - movs r5, 0 - lsls r4, 16 - str r4, [sp, 0x8] - mov r1, r9 - lsls r1, 16 - str r1, [sp, 0x4] - ldr r2, _080AD314 @ =gUnknown_83E5E44 - mov r9, r2 - lsls r0, 24 - asrs r0, 24 - str r0, [sp] - mov r3, r8 - lsls r3, 1 - mov r10, r3 -_080AD278: - ldr r0, _080AD318 @ =gUnknown_83E5E2C - ldr r2, [sp, 0x8] - asrs r1, r2, 16 - ldr r3, [sp, 0x4] - asrs r2, r3, 16 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080AD2FA - ldr r1, _080AD31C @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r4, r0, r1 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - lsls r0, r5, 2 - adds r0, 0x40 - adds r1, r0 - ldr r3, _080AD320 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r3, _080AD324 @ =0xfffffc00 - adds r0, r3, 0 - ands r2, r0 - orrs r2, r1 - strh r2, [r4, 0x4] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x4 - bls _080AD2C2 - movs r5, 0 -_080AD2C2: - lsls r2, r6, 2 - mov r1, r9 - adds r0, r2, r1 - ldrh r0, [r0] - ldr r3, [sp] - adds r1, r0, 0 - muls r1, r3 - lsls r1, 16 - asrs r1, 16 - ldr r0, _080AD328 @ =gUnknown_83E5E46 - adds r2, r0 - movs r3, 0 - ldrsh r2, [r2, r3] - adds r0, r4, 0 - bl sub_80AD3C8 - strh r7, [r4, 0x3A] - mov r0, r8 - strh r0, [r4, 0x3C] - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - add r0, r10 - ldr r1, _080AD32C @ =gTasks+0x8 - adds r0, r1 - ldrh r1, [r0] - adds r1, 0x1 - strh r1, [r0] -_080AD2FA: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x6 - bls _080AD278 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AD314: .4byte gUnknown_83E5E44 -_080AD318: .4byte gUnknown_83E5E2C -_080AD31C: .4byte gSprites -_080AD320: .4byte 0x000003ff -_080AD324: .4byte 0xfffffc00 -_080AD328: .4byte gUnknown_83E5E46 -_080AD32C: .4byte gTasks+0x8 - thumb_func_end sub_80AD1F8 - - thumb_func_start sub_80AD330 -sub_80AD330: @ 80AD330 - push {r4,lr} - adds r4, r0, 0 - bl sub_80AD3E4 - adds r0, r4, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080AD36A - ldr r3, _080AD370 @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - adds r0, r4, 0 - bl DestroySprite -_080AD36A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AD370: .4byte gTasks - thumb_func_end sub_80AD330 - - thumb_func_start sub_80AD374 -sub_80AD374: @ 80AD374 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080AD3AC @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r2, [r1, 0x26] - ldrh r0, [r1, 0x22] - adds r2, r0 - adds r1, 0x29 - movs r0, 0 - ldrsb r0, [r1, r0] - adds r0, r2 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _080AD3B0 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AD3B4 - lsls r0, r4, 16 - movs r1, 0x94 - lsls r1, 15 - b _080AD3BA - .align 2, 0 -_080AD3AC: .4byte gSprites -_080AD3B0: .4byte gBattleAnimAttacker -_080AD3B4: - lsls r0, r4, 16 - movs r1, 0xB0 - lsls r1, 14 -_080AD3BA: - adds r0, r1 - lsrs r4, r0, 16 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80AD374 - - thumb_func_start sub_80AD3C8 -sub_80AD3C8: @ 80AD3C8 - movs r3, 0 - strh r3, [r0, 0x2E] - strh r3, [r0, 0x30] - ldrh r3, [r0, 0x20] - lsls r3, 3 - strh r3, [r0, 0x32] - ldrh r3, [r0, 0x22] - lsls r3, 3 - strh r3, [r0, 0x34] - lsls r1, 3 - strh r1, [r0, 0x36] - lsls r2, 3 - strh r2, [r0, 0x38] - bx lr - thumb_func_end sub_80AD3C8 - - thumb_func_start sub_80AD3E4 -sub_80AD3E4: @ 80AD3E4 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080AD40E - movs r0, 0 - strh r0, [r2, 0x2E] - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - ldrh r0, [r2, 0x30] - adds r1, r0, 0 - muls r1, r0 - adds r0, r1, 0 - ldrh r3, [r2, 0x34] - adds r0, r3 - strh r0, [r2, 0x34] -_080AD40E: - ldrh r0, [r2, 0x36] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 19 - strh r0, [r2, 0x20] - ldrh r1, [r2, 0x38] - ldrh r3, [r2, 0x34] - adds r1, r3 - strh r1, [r2, 0x34] - lsls r1, 16 - asrs r3, r1, 19 - strh r3, [r2, 0x22] - adds r0, 0x8 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 17 - cmp r0, r1 - bhi _080AD444 - adds r1, r3, 0 - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - blt _080AD444 - cmp r1, 0x78 - ble _080AD450 -_080AD444: - adds r0, r2, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_080AD450: - pop {r0} - bx r0 - thumb_func_end sub_80AD3E4 - - thumb_func_start sub_80AD454 -sub_80AD454: @ 80AD454 - push {r4,r5,lr} - ldr r3, _080AD498 @ =gBattleAnimArgs - ldrh r1, [r3] - movs r2, 0 - strh r1, [r0, 0x20] - ldrh r1, [r3, 0x2] - strh r1, [r0, 0x22] - strh r2, [r0, 0x2E] - strh r2, [r0, 0x30] - strh r2, [r0, 0x32] - ldrh r1, [r3, 0x4] - strh r1, [r0, 0x3A] - ldrh r1, [r3, 0x6] - strh r1, [r0, 0x3C] - ldrh r4, [r0, 0x4] - lsls r2, r4, 22 - lsrs r2, 22 - movs r5, 0x8 - ldrsh r1, [r3, r5] - lsls r1, 4 - adds r2, r1 - ldr r3, _080AD49C @ =0x000003ff - adds r1, r3, 0 - ands r2, r1 - ldr r1, _080AD4A0 @ =0xfffffc00 - ands r1, r4 - orrs r1, r2 - strh r1, [r0, 0x4] - ldr r1, _080AD4A4 @ =sub_80AD4A8 - str r1, [r0, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AD498: .4byte gBattleAnimArgs -_080AD49C: .4byte 0x000003ff -_080AD4A0: .4byte 0xfffffc00 -_080AD4A4: .4byte sub_80AD4A8 - thumb_func_end sub_80AD454 - - thumb_func_start sub_80AD4A8 -sub_80AD4A8: @ 80AD4A8 - push {r4,lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0x1 - beq _080AD4DA - cmp r0, 0x1 - bgt _080AD4BE - cmp r0, 0 - beq _080AD4C4 - b _080AD538 -_080AD4BE: - cmp r0, 0x2 - beq _080AD4F8 - b _080AD538 -_080AD4C4: - ldrh r1, [r2, 0x3A] - movs r3, 0x3A - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _080AD4D4 - subs r0, r1, 0x1 - strh r0, [r2, 0x3A] - b _080AD538 -_080AD4D4: - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] -_080AD4DA: - ldrh r0, [r2, 0x22] - adds r0, 0x8 - strh r0, [r2, 0x22] - lsls r0, 16 - asrs r0, 16 - ldrh r3, [r2, 0x3C] - movs r4, 0x3C - ldrsh r1, [r2, r4] - cmp r0, r1 - blt _080AD538 - strh r3, [r2, 0x22] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - b _080AD538 -_080AD4F8: - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AD524 - movs r0, 0 - strh r0, [r2, 0x30] - ldrh r0, [r2, 0x32] - adds r0, 0x1 - strh r0, [r2, 0x32] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080AD520 - ldr r0, _080AD51C @ =0x0000fffd - b _080AD522 - .align 2, 0 -_080AD51C: .4byte 0x0000fffd -_080AD520: - movs r0, 0x3 -_080AD522: - strh r0, [r2, 0x26] -_080AD524: - ldrh r0, [r2, 0x34] - adds r0, 0x1 - strh r0, [r2, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080AD538 - adds r0, r2, 0 - bl DestroyAnimSprite -_080AD538: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AD4A8 - - thumb_func_start sub_80AD540 -sub_80AD540: @ 80AD540 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080AD5B4 - cmp r0, 0x1 - bgt _080AD556 - cmp r0, 0 - beq _080AD55C - b _080AD682 -_080AD556: - cmp r0, 0x2 - beq _080AD612 - b _080AD682 -_080AD55C: - adds r0, r5, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - ldr r4, _080AD584 @ =gBattleAnimArgs - ldrb r1, [r4, 0x4] - adds r0, r5, 0 - bl StartSpriteAnim - ldrh r0, [r4, 0x4] - strh r0, [r5, 0x3C] - ldr r0, _080AD588 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AD58C - movs r0, 0x4 - b _080AD58E - .align 2, 0 -_080AD584: .4byte gBattleAnimArgs -_080AD588: .4byte gBattleAnimAttacker -_080AD58C: - ldr r0, _080AD5AC @ =0x0000fffc -_080AD58E: - strh r0, [r5, 0x36] - ldr r0, _080AD5B0 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080AD60A - .align 2, 0 -_080AD5AC: .4byte 0x0000fffc -_080AD5B0: .4byte gBattleAnimTarget -_080AD5B4: - ldrh r0, [r5, 0x30] - adds r0, 0xC0 - strh r0, [r5, 0x30] - ldr r0, _080AD5D4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AD5D8 - ldrh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 24 - negs r0, r0 - b _080AD5DE - .align 2, 0 -_080AD5D4: .4byte gBattleAnimAttacker -_080AD5D8: - ldrh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 24 -_080AD5DE: - strh r0, [r5, 0x26] - movs r2, 0x32 - ldrsh r0, [r5, r2] - movs r2, 0x36 - ldrsh r1, [r5, r2] - bl Sin - strh r0, [r5, 0x24] - ldrh r0, [r5, 0x32] - adds r0, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x34] - adds r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _080AD682 - movs r0, 0 - strh r0, [r5, 0x34] -_080AD60A: - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080AD682 -_080AD612: - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r2, 0x36 - ldrsh r1, [r5, r2] - bl Sin - adds r2, r0, 0 - movs r3, 0 - strh r2, [r5, 0x24] - ldrh r0, [r5, 0x32] - adds r0, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x34] - adds r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _080AD682 - ldrh r0, [r5, 0x20] - adds r1, r2, r0 - strh r1, [r5, 0x20] - ldrh r0, [r5, 0x26] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - strh r3, [r5, 0x26] - strh r3, [r5, 0x24] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r5, 0x2E] - strh r1, [r5, 0x30] - ldr r4, _080AD688 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl sub_8075678 - ldr r0, _080AD68C @ =sub_80AD690 - str r0, [r5, 0x1C] -_080AD682: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AD688: .4byte gBattleAnimTarget -_080AD68C: .4byte sub_80AD690 - thumb_func_end sub_80AD540 - - thumb_func_start sub_80AD690 -sub_80AD690: @ 80AD690 - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - bne _080AD6E8 - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r1, 0x10 - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - ldrh r2, [r4, 0x38] - adds r0, r2, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x38] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0 - beq _080AD6C6 - cmp r2, 0xC4 - ble _080AD6EE -_080AD6C6: - lsls r0, 16 - cmp r0, 0 - ble _080AD6EE - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080AD6EE - ldr r0, _080AD6E4 @ =gUnknown_2037F24 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0x89 - bl PlaySE12WithPanning - b _080AD6EE - .align 2, 0 -_080AD6E4: .4byte gUnknown_2037F24 -_080AD6E8: - adds r0, r4, 0 - bl DestroyAnimSprite -_080AD6EE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AD690 - - thumb_func_start sub_80AD6F4 -sub_80AD6F4: @ 80AD6F4 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080AD70C - ldr r0, _080AD778 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x30] - adds r0, r1, 0x1 - strh r0, [r4, 0x2E] -_080AD70C: - movs r0, 0xC0 - lsls r0, 1 - adds r1, r0, 0 - ldrh r2, [r4, 0x34] - adds r1, r2 - strh r1, [r4, 0x34] - ldrh r0, [r4, 0x36] - adds r0, 0xA0 - strh r0, [r4, 0x36] - movs r2, 0x30 - ldrsh r0, [r4, r2] - lsls r1, 16 - asrs r1, 24 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x36] - lsls r1, 16 - asrs r1, 24 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - adds r0, 0x7 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x30] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AD7A8 - ldrh r0, [r4, 0x30] - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x83 - bls _080AD780 - ldr r0, _080AD77C @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - b _080AD7C4 - .align 2, 0 -_080AD778: .4byte gBattleAnimArgs -_080AD77C: .4byte gBattleAnimTarget -_080AD780: - ldr r0, _080AD7A4 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - lsls r0, 2 - ldrb r2, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x5] - b _080AD7C4 - .align 2, 0 -_080AD7A4: .4byte gBattleAnimTarget -_080AD7A8: - ldrh r0, [r4, 0x30] - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x83 - bls _080AD7BC - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1D - b _080AD7C2 -_080AD7BC: - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1F -_080AD7C2: - strb r0, [r1] -_080AD7C4: - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _080AD7EC - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080AD7EC: - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r0, 0x1E - bne _080AD7FA - adds r0, r4, 0 - bl DestroyAnimSprite -_080AD7FA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AD6F4 - - thumb_func_start sub_80AD800 -sub_80AD800: @ 80AD800 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080AD860 @ =gTasks - adds r4, r1, r0 - ldr r0, _080AD864 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - movs r2, 0x1 - negs r2, r2 - adds r1, r2, 0 - cmp r0, 0 - bne _080AD826 - movs r1, 0x1 -_080AD826: - strh r1, [r4, 0x20] - ldr r0, _080AD868 @ =gBattleAnimTarget - ldrb r1, [r0] - movs r0, 0x2 - eors r0, r1 - bl IsBattlerSpriteVisible - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1 - strh r0, [r4, 0x22] - movs r0, 0x1 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x24] - movs r0, 0x3 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x26] - ldr r0, _080AD86C @ =sub_80AD870 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AD860: .4byte gTasks -_080AD864: .4byte gBattleAnimAttacker -_080AD868: .4byte gBattleAnimTarget -_080AD86C: .4byte sub_80AD870 - thumb_func_end sub_80AD800 - - thumb_func_start sub_80AD870 -sub_80AD870: @ 80AD870 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080AD894 @ =gTasks - adds r2, r0, r1 - movs r0, 0x8 - ldrsh r3, [r2, r0] - cmp r3, 0x1 - beq _080AD938 - cmp r3, 0x1 - bgt _080AD898 - cmp r3, 0 - beq _080AD8A6 - b _080ADA98 - .align 2, 0 -_080AD894: .4byte gTasks -_080AD898: - cmp r3, 0x2 - bne _080AD89E - b _080AD9C0 -_080AD89E: - cmp r3, 0x3 - bne _080AD8A4 - b _080ADA54 -_080AD8A4: - b _080ADA98 -_080AD8A6: - movs r1, 0x20 - ldrsh r0, [r2, r1] - lsls r0, 1 - ldrh r5, [r2, 0x1C] - adds r0, r5 - strh r0, [r2, 0x1C] - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AD8D8 - strh r3, [r2, 0xA] - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080AD8D4 - movs r0, 0x2 - b _080AD8D6 -_080AD8D4: - ldr r0, _080AD930 @ =0x0000fffe -_080AD8D6: - strh r0, [r2, 0x1E] -_080AD8D8: - movs r1, 0 - strh r1, [r2, 0xE] - movs r7, 0x22 - ldrsh r0, [r2, r7] - cmp r1, r0 - bge _080AD91A - ldr r4, _080AD934 @ =gSprites - adds r3, r2, 0 - adds r3, 0x8 -_080AD8EA: - movs r1, 0xE - ldrsh r0, [r2, r1] - adds r0, 0xE - lsls r0, 1 - adds r0, r3, r0 - movs r5, 0 - ldrsh r0, [r0, r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r2, 0x1E] - ldrh r7, [r2, 0x1C] - adds r0, r7 - strh r0, [r1, 0x24] - ldrh r0, [r2, 0xE] - adds r0, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - asrs r0, 16 - movs r5, 0x22 - ldrsh r1, [r2, r5] - cmp r0, r1 - blt _080AD8EA -_080AD91A: - ldrh r0, [r2, 0x1A] - adds r0, 0x1 - strh r0, [r2, 0x1A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - beq _080AD92A - b _080ADA98 -_080AD92A: - movs r0, 0 - strh r0, [r2, 0x1A] - b _080ADA44 - .align 2, 0 -_080AD930: .4byte 0x0000fffe -_080AD934: .4byte gSprites -_080AD938: - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080AD960 - movs r0, 0 - strh r0, [r2, 0xA] - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - ands r0, r3 - lsls r0, 16 - cmp r0, 0 - beq _080AD95C - movs r0, 0x2 - b _080AD95E -_080AD95C: - ldr r0, _080AD9B8 @ =0x0000fffe -_080AD95E: - strh r0, [r2, 0x1E] -_080AD960: - movs r1, 0 - strh r1, [r2, 0xE] - movs r7, 0x22 - ldrsh r0, [r2, r7] - cmp r1, r0 - bge _080AD9A2 - ldr r4, _080AD9BC @ =gSprites - adds r3, r2, 0 - adds r3, 0x8 -_080AD972: - movs r1, 0xE - ldrsh r0, [r2, r1] - adds r0, 0xE - lsls r0, 1 - adds r0, r3, r0 - movs r5, 0 - ldrsh r0, [r0, r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r2, 0x1E] - ldrh r7, [r2, 0x1C] - adds r0, r7 - strh r0, [r1, 0x24] - ldrh r0, [r2, 0xE] - adds r0, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - asrs r0, 16 - movs r5, 0x22 - ldrsh r1, [r2, r5] - cmp r0, r1 - blt _080AD972 -_080AD9A2: - ldrh r0, [r2, 0x1A] - adds r0, 0x1 - strh r0, [r2, 0x1A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x60 - bne _080ADA98 - movs r0, 0 - strh r0, [r2, 0x1A] - b _080ADA44 - .align 2, 0 -_080AD9B8: .4byte 0x0000fffe -_080AD9BC: .4byte gSprites -_080AD9C0: - movs r7, 0x20 - ldrsh r1, [r2, r7] - lsls r1, 1 - ldrh r0, [r2, 0x1C] - subs r0, r1 - strh r0, [r2, 0x1C] - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AD9F4 - movs r0, 0 - strh r0, [r2, 0xA] - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080AD9F0 - strh r3, [r2, 0x1E] - b _080AD9F4 -_080AD9F0: - ldr r0, _080ADA4C @ =0x0000fffe - strh r0, [r2, 0x1E] -_080AD9F4: - movs r1, 0 - strh r1, [r2, 0xE] - movs r3, 0x22 - ldrsh r0, [r2, r3] - cmp r1, r0 - bge _080ADA36 - ldr r4, _080ADA50 @ =gSprites - adds r3, r2, 0 - adds r3, 0x8 -_080ADA06: - movs r5, 0xE - ldrsh r0, [r2, r5] - adds r0, 0xE - lsls r0, 1 - adds r0, r3, r0 - movs r7, 0 - ldrsh r0, [r0, r7] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r2, 0x1E] - ldrh r5, [r2, 0x1C] - adds r0, r5 - strh r0, [r1, 0x24] - ldrh r0, [r2, 0xE] - adds r0, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - asrs r0, 16 - movs r7, 0x22 - ldrsh r1, [r2, r7] - cmp r0, r1 - blt _080ADA06 -_080ADA36: - ldrh r0, [r2, 0x1A] - adds r0, 0x1 - strh r0, [r2, 0x1A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - bne _080ADA98 -_080ADA44: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080ADA98 - .align 2, 0 -_080ADA4C: .4byte 0x0000fffe -_080ADA50: .4byte gSprites -_080ADA54: - movs r1, 0 - strh r1, [r2, 0xE] - movs r3, 0x22 - ldrsh r0, [r2, r3] - cmp r1, r0 - bge _080ADA92 - ldr r6, _080ADAA0 @ =gSprites - adds r3, r2, 0 - adds r3, 0x8 - movs r5, 0 -_080ADA68: - movs r7, 0xE - ldrsh r0, [r2, r7] - adds r0, 0xE - lsls r0, 1 - adds r0, r3, r0 - movs r7, 0 - ldrsh r1, [r0, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r5, [r0, 0x24] - ldrh r0, [r2, 0xE] - adds r0, 0x1 - strh r0, [r2, 0xE] - lsls r0, 16 - asrs r0, 16 - movs r7, 0x22 - ldrsh r1, [r2, r7] - cmp r0, r1 - blt _080ADA68 -_080ADA92: - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080ADA98: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080ADAA0: .4byte gSprites - thumb_func_end sub_80AD870 - - thumb_func_start sub_80ADAA4 -sub_80ADAA4: @ 80ADAA4 - push {r4,lr} - sub sp, 0x10 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x8] - lsls r0, 4 - ldr r1, _080ADAD4 @ =gBattleAnimArgs - ldrb r2, [r1] - ldrh r3, [r1, 0x2] - movs r1, 0x10 - bl BlendPalette - adds r0, r4, 0 - bl DestroyAnimVisualTask - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ADAD4: .4byte gBattleAnimArgs - thumb_func_end sub_80ADAA4 - - thumb_func_start sub_80ADAD8 -sub_80ADAD8: @ 80ADAD8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, _080ADB30 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r2, r0, r1 - movs r3, 0x8 - ldrsh r0, [r2, r3] - mov r9, r1 - ldr r4, _080ADB34 @ =gBattleAnimArgs - mov r8, r4 - cmp r0, 0 - bne _080ADB0E - ldrh r0, [r4] - strh r0, [r2, 0xA] - ldrh r0, [r4, 0x2] - strh r0, [r2, 0xC] - ldrh r0, [r4, 0x4] - strh r0, [r2, 0xE] - ldrh r0, [r4, 0x6] - strh r0, [r2, 0x10] -_080ADB0E: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - ldr r1, _080ADB38 @ =gBattlerSpriteIds - ldr r0, _080ADB3C @ =gBattleAnimTarget - ldrb r0, [r0] - adds r0, r1 - ldrb r6, [r0] - movs r5, 0x10 - ldrsh r0, [r2, r5] - cmp r0, 0 - bne _080ADB44 - ldr r4, _080ADB40 @ =gUnknown_83E5EFC - movs r1, 0x8 - ldrsh r0, [r2, r1] - b _080ADB4A - .align 2, 0 -_080ADB30: .4byte gTasks -_080ADB34: .4byte gBattleAnimArgs -_080ADB38: .4byte gBattlerSpriteIds -_080ADB3C: .4byte gBattleAnimTarget -_080ADB40: .4byte gUnknown_83E5EFC -_080ADB44: - ldr r4, _080ADB90 @ =gUnknown_83E5F0C - movs r3, 0x8 - ldrsh r0, [r2, r3] -_080ADB4A: - movs r1, 0xA - bl __modsi3 - lsls r0, 16 - asrs r0, 16 - adds r0, r4 - ldrb r5, [r0] - lsls r0, r7, 2 - adds r1, r0, r7 - lsls r1, 3 - add r1, r9 - movs r4, 0xE - ldrsh r1, [r1, r4] - mov r12, r0 - cmp r1, 0x1 - bne _080ADB98 - ldr r2, _080ADB94 @ =gSprites - lsls r3, r6, 4 - adds r0, r3, r6 - lsls r0, 2 - adds r0, r2 - mov r10, r0 - mov r0, r8 - movs r4, 0x2 - ldrsh r1, [r0, r4] - lsls r0, r5, 24 - asrs r0, 24 - muls r0, r1 - cmp r0, 0 - bge _080ADB88 - negs r0, r0 -_080ADB88: - mov r5, r10 - strh r0, [r5, 0x26] - b _080ADBB2 - .align 2, 0 -_080ADB90: .4byte gUnknown_83E5F0C -_080ADB94: .4byte gSprites -_080ADB98: - ldr r3, _080ADBE8 @ =gSprites - lsls r4, r6, 4 - adds r2, r4, r6 - lsls r2, 2 - adds r2, r3 - lsls r0, r5, 24 - asrs r0, 24 - mov r5, r8 - ldrh r1, [r5, 0x2] - muls r0, r1 - strh r0, [r2, 0x24] - adds r2, r3, 0 - adds r3, r4, 0 -_080ADBB2: - mov r1, r12 - adds r0, r1, r7 - lsls r0, 3 - add r0, r9 - movs r4, 0x8 - ldrsh r1, [r0, r4] - movs r5, 0xA - ldrsh r0, [r0, r5] - cmp r1, r0 - bne _080ADBD8 - adds r0, r3, r6 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x24] - strh r1, [r0, 0x26] - adds r0, r7, 0 - bl DestroyAnimVisualTask -_080ADBD8: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080ADBE8: .4byte gSprites - thumb_func_end sub_80ADAD8 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/ice.s b/asm/ice.s deleted file mode 100644 index a2c8d0472..000000000 --- a/asm/ice.s +++ /dev/null @@ -1,3099 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80AF058 -sub_80AF058: @ 80AF058 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _080AF0B4 @ =gUnknown_83E5F38 - movs r2, 0x22 - ldrsh r1, [r4, r2] - movs r3, 0x24 - ldrsh r2, [r4, r3] - ldrh r3, [r4, 0x20] - lsls r3, 24 - lsrs r3, 24 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080AF09C - ldr r3, _080AF0B8 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x1C - adds r1, r0, r1 - ldr r2, _080AF0BC @ =sub_80AF0C8 - str r2, [r1] - adds r0, r3 - strh r5, [r0, 0x3A] - movs r1, 0xA - strh r1, [r0, 0x3C] - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] -_080AF09C: - ldrh r2, [r4, 0x24] - movs r0, 0x24 - ldrsh r1, [r4, r0] - movs r3, 0x26 - ldrsh r0, [r4, r3] - cmp r1, r0 - bge _080AF0C0 - adds r0, r2, 0 - adds r0, 0x20 - strh r0, [r4, 0x24] - movs r0, 0 - b _080AF0C2 - .align 2, 0 -_080AF0B4: .4byte gUnknown_83E5F38 -_080AF0B8: .4byte gSprites -_080AF0BC: .4byte sub_80AF0C8 -_080AF0C0: - movs r0, 0x1 -_080AF0C2: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80AF058 - - thumb_func_start sub_80AF0C8 -sub_80AF0C8: @ 80AF0C8 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080AF0FC - ldr r3, _080AF104 @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - adds r0, r4, 0 - bl DestroySprite -_080AF0FC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AF104: .4byte gTasks - thumb_func_end sub_80AF0C8 - - thumb_func_start sub_80AF108 -sub_80AF108: @ 80AF108 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x7 - ldr r3, _080AF210 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080AF214 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - ldr r4, _080AF218 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r4, _080AF21C @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r0, [r4] - movs r1, 0x3 - str r3, [sp] - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080AF220 @ =gBattleAnimArgs - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r1] - ldr r3, [sp] - adds r0, r3 - strh r0, [r5, 0x30] - ldrh r0, [r1, 0x4] - mov r4, r9 - adds r0, r4, r0 - strh r0, [r5, 0x32] - ldrh r0, [r1, 0x2] - adds r0, r6 - strh r0, [r5, 0x34] - ldrh r0, [r1, 0x6] - mov r7, r8 - adds r0, r7, r0 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl sub_8074C80 - adds r4, 0x20 - movs r0, 0x98 - lsls r0, 1 - mov r12, r0 - ldr r3, [sp] - cmp r4, r12 - bhi _080AF1E2 - adds r0, r7, 0 - adds r0, 0x20 - ldrh r1, [r5, 0x30] - ldrh r2, [r5, 0x32] - cmp r0, 0xE0 - bhi _080AF1E2 - adds r4, r1, 0 - mov r10, r12 -_080AF1AE: - mov r7, r9 - lsls r1, r7, 16 - asrs r1, 16 - adds r1, r4 - lsls r1, 16 - mov r7, r8 - lsls r0, r7, 16 - asrs r0, 16 - adds r0, r2 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsrs r0, r1, 16 - mov r9, r0 - movs r7, 0x80 - lsls r7, 14 - adds r1, r7 - lsrs r1, 16 - cmp r1, r10 - bhi _080AF1E2 - mov r1, r8 - lsls r0, r1, 16 - adds r0, r7 - lsrs r0, 16 - cmp r0, 0xE0 - bls _080AF1AE -_080AF1E2: - ldrh r0, [r5, 0x30] - negs r7, r0 - strh r7, [r5, 0x30] - ldrh r0, [r5, 0x32] - negs r4, r0 - strh r4, [r5, 0x32] - lsls r0, r3, 16 - movs r1, 0x80 - lsls r1, 14 - adds r0, r1 - lsrs r0, 16 - movs r2, 0x98 - lsls r2, 1 - mov r12, r2 - ldr r1, _080AF220 @ =gBattleAnimArgs - mov r10, r1 - cmp r0, r12 - bhi _080AF24E - lsls r1, r6, 16 - movs r2, 0x80 - lsls r2, 14 - adds r0, r1, r2 - b _080AF246 - .align 2, 0 -_080AF210: .4byte 0x000003ff -_080AF214: .4byte 0xfffffc00 -_080AF218: .4byte gBattleAnimTarget -_080AF21C: .4byte gBattleAnimAttacker -_080AF220: .4byte gBattleAnimArgs -_080AF224: - lsls r1, r3, 16 - asrs r1, 16 - adds r1, r7 - lsls r1, 16 - asrs r0, r2, 16 - adds r0, r4 - lsls r0, 16 - lsrs r6, r0, 16 - lsrs r3, r1, 16 - movs r0, 0x80 - lsls r0, 14 - adds r1, r0 - lsrs r1, 16 - cmp r1, r12 - bhi _080AF24E - lsls r1, r6, 16 - adds r0, r1, r0 -_080AF246: - lsrs r0, 16 - adds r2, r1, 0 - cmp r0, 0xE0 - bls _080AF224 -_080AF24E: - strh r3, [r5, 0x20] - strh r6, [r5, 0x22] - mov r1, r10 - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x2E] - strh r3, [r5, 0x30] - mov r2, r9 - strh r2, [r5, 0x32] - strh r6, [r5, 0x34] - mov r3, r8 - strh r3, [r5, 0x36] - adds r0, r5, 0 - bl sub_8074C80 - mov r7, r10 - ldrh r0, [r7, 0xA] - strh r0, [r5, 0x34] - ldrh r0, [r7, 0xC] - strh r0, [r5, 0x36] - ldr r0, _080AF288 @ =sub_80AF28C - str r0, [r5, 0x1C] - 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 -_080AF288: .4byte sub_80AF28C - thumb_func_end sub_80AF108 - - thumb_func_start sub_80AF28C -sub_80AF28C: @ 80AF28C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080AF2E4 - ldrh r1, [r4, 0x30] - ldrh r2, [r4, 0x38] - adds r1, r2 - strh r1, [r4, 0x38] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x3A] - adds r0, r2 - strh r0, [r4, 0x3A] - strh r1, [r4, 0x24] - strh r0, [r4, 0x26] - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r2, 0x3C - ldrsh r0, [r4, r2] - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x36] - ldrh r2, [r4, 0x3C] - adds r0, r2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - b _080AF2EA -_080AF2E4: - adds r0, r4, 0 - bl DestroyAnimSprite -_080AF2EA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AF28C - - thumb_func_start sub_80AF2F0 -sub_80AF2F0: @ 80AF2F0 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080AF324 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x2E] - movs r0, 0x3C - strh r0, [r4, 0x30] - movs r0, 0x9 - strh r0, [r4, 0x32] - movs r0, 0x1E - strh r0, [r4, 0x34] - movs r0, 0xFE - lsls r0, 8 - strh r0, [r4, 0x36] - ldr r1, _080AF328 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r1, _080AF32C @ =TranslateSpriteInGrowingCircleOverDuration - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AF324: .4byte gBattleAnimArgs -_080AF328: .4byte DestroyAnimSprite -_080AF32C: .4byte TranslateSpriteInGrowingCircleOverDuration - thumb_func_end sub_80AF2F0 - - thumb_func_start sub_80AF330 -sub_80AF330: @ 80AF330 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080AF364 @ =gBattleAnimTarget - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldr r0, _080AF368 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AF370 - ldr r0, _080AF36C @ =gBattleAnimArgs - ldrh r1, [r4, 0x32] - ldrh r0, [r0, 0x4] - subs r1, r0 - strh r1, [r4, 0x32] - b _080AF37A - .align 2, 0 -_080AF364: .4byte gBattleAnimTarget -_080AF368: .4byte gBattleAnimAttacker -_080AF36C: .4byte gBattleAnimArgs -_080AF370: - ldr r0, _080AF3A8 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - ldrh r1, [r4, 0x32] - adds r0, r1 - strh r0, [r4, 0x32] -_080AF37A: - ldr r0, _080AF3AC @ =gBattleAnimTarget - ldrb r0, [r0] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r1, _080AF3A8 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r2, [r1, 0x6] - adds r0, r2 - strh r0, [r4, 0x36] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x2E] - ldr r1, _080AF3B0 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080AF3B4 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AF3A8: .4byte gBattleAnimArgs -_080AF3AC: .4byte gBattleAnimTarget -_080AF3B0: .4byte DestroyAnimSprite -_080AF3B4: .4byte StartAnimLinearTranslation - thumb_func_end sub_80AF330 - - thumb_func_start sub_80AF3B8 -sub_80AF3B8: @ 80AF3B8 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080AF3D0 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080AF3D4 - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - b _080AF40A - .align 2, 0 -_080AF3D0: .4byte gBattleAnimArgs -_080AF3D4: - ldr r0, _080AF41C @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0x1 - bl SetAverageBattlerPositions - ldr r0, _080AF420 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AF3FA - ldrh r0, [r5] - negs r0, r0 - strh r0, [r5] -_080AF3FA: - ldrh r0, [r5] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] -_080AF40A: - ldr r1, _080AF424 @ =sub_80AF42C - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080AF428 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AF41C: .4byte gBattleAnimTarget -_080AF420: .4byte gBattleAnimAttacker -_080AF424: .4byte sub_80AF42C -_080AF428: .4byte RunStoredCallbackWhenAffineAnimEnds - thumb_func_end sub_80AF3B8 - - thumb_func_start sub_80AF42C -sub_80AF42C: @ 80AF42C - push {lr} - adds r3, r0, 0 - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080AF462 - adds r0, r3, 0 - bl DestroySpriteAndMatrix -_080AF462: - pop {r0} - bx r0 - thumb_func_end sub_80AF42C - - thumb_func_start sub_80AF468 -sub_80AF468: @ 80AF468 - push {r4-r7,lr} - sub sp, 0x10 - adds r5, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r6, _080AF4B0 @ =gBattleAnimArgs - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - movs r1, 0xA - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080AF4B8 - ldr r4, _080AF4B4 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x6] - adds r0, r6 - strh r0, [r5, 0x36] - b _080AF4CA - .align 2, 0 -_080AF4B0: .4byte gBattleAnimArgs -_080AF4B4: .4byte gBattleAnimTarget -_080AF4B8: - ldr r0, _080AF4E4 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x32 - adds r3, r5, 0 - adds r3, 0x36 - movs r1, 0x1 - bl SetAverageBattlerPositions -_080AF4CA: - ldr r0, _080AF4E8 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AF4F0 - ldr r0, _080AF4EC @ =gBattleAnimArgs - ldrh r1, [r5, 0x32] - ldrh r0, [r0, 0x4] - subs r1, r0 - strh r1, [r5, 0x32] - b _080AF4FA - .align 2, 0 -_080AF4E4: .4byte gBattleAnimTarget -_080AF4E8: .4byte gBattleAnimAttacker -_080AF4EC: .4byte gBattleAnimArgs -_080AF4F0: - ldr r0, _080AF598 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - ldrh r2, [r5, 0x32] - adds r0, r2 - strh r0, [r5, 0x32] -_080AF4FA: - adds r7, r5, 0 - adds r7, 0x2E - adds r2, r7, 0 - mov r1, sp - movs r4, 0x7 -_080AF504: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080AF504 - adds r0, r5, 0 - bl InitAnimFastLinearTranslationWithSpeed - ldrh r0, [r5, 0x30] - movs r1, 0x1 - eors r0, r1 - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x32] - eors r0, r1 - strh r0, [r5, 0x32] -_080AF526: - movs r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r5, 0 - bl AnimFastTranslateLinear - movs r0, 0x20 - ldrsh r1, [r5, r0] - movs r2, 0x24 - ldrsh r0, [r5, r2] - adds r1, r0 - adds r1, 0x10 - movs r0, 0x88 - lsls r0, 1 - cmp r1, r0 - bhi _080AF55A - movs r0, 0x22 - ldrsh r1, [r5, r0] - movs r2, 0x26 - ldrsh r0, [r5, r2] - adds r1, r0 - cmp r1, 0xA0 - bgt _080AF55A - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080AF526 -_080AF55A: - 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] - ldr r6, _080AF59C @ =sub_8075830 - ldr r1, _080AF5A0 @ =sub_80AF5A4 - mov r3, sp - adds r2, r7, 0 - movs r4, 0x7 -_080AF57A: - ldrh r0, [r3] - strh r0, [r2] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080AF57A - str r6, [r5, 0x1C] - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AF598: .4byte gBattleAnimArgs -_080AF59C: .4byte sub_8075830 -_080AF5A0: .4byte sub_80AF5A4 - thumb_func_end sub_80AF468 - - thumb_func_start sub_80AF5A4 -sub_80AF5A4: @ 80AF5A4 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - movs r5, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r5, [r4, 0x26] - strh r5, [r4, 0x24] - movs r0, 0x80 - strh r0, [r4, 0x2E] - ldr r0, _080AF600 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - ldr r1, _080AF604 @ =0x0000ffec - cmp r0, 0 - beq _080AF5D4 - movs r1, 0x14 -_080AF5D4: - movs r2, 0x2E - ldrsh r0, [r4, r2] - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x34] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0xF - bl Cos - strh r0, [r4, 0x36] - strh r5, [r4, 0x38] - ldr r1, _080AF608 @ =sub_80AF60C - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AF600: .4byte gBattleAnimAttacker -_080AF604: .4byte 0x0000ffec -_080AF608: .4byte sub_80AF60C - thumb_func_end sub_80AF5A4 - - thumb_func_start sub_80AF60C -sub_80AF60C: @ 80AF60C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080AF660 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - ldr r1, _080AF664 @ =0x0000ffec - cmp r0, 0 - beq _080AF622 - movs r1, 0x14 -_080AF622: - movs r2, 0x38 - ldrsh r0, [r4, r2] - cmp r0, 0x1F - bgt _080AF668 - movs r2, 0x2E - ldrsh r0, [r4, r2] - lsls r1, 16 - asrs r1, 16 - bl Sin - ldrh r1, [r4, 0x34] - subs r0, r1 - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0xF - bl Cos - ldrh r1, [r4, 0x36] - subs r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - adds r0, 0x10 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - b _080AF686 - .align 2, 0 -_080AF660: .4byte gBattleAnimAttacker -_080AF664: .4byte 0x0000ffec -_080AF668: - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - movs r1, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r1, [r4, 0x26] - strh r1, [r4, 0x24] - strh r1, [r4, 0x36] - strh r1, [r4, 0x34] - ldr r0, _080AF68C @ =sub_80AF690 - str r0, [r4, 0x1C] -_080AF686: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AF68C: .4byte sub_80AF690 - thumb_func_end sub_80AF60C - - thumb_func_start sub_80AF690 -sub_80AF690: @ 80AF690 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl AnimFastTranslateLinear - movs r1, 0x20 - ldrsh r0, [r4, r1] - movs r2, 0x24 - ldrsh r1, [r4, r2] - adds r0, r1 - adds r0, 0x10 - movs r1, 0x88 - lsls r1, 1 - cmp r0, r1 - bhi _080AF6CC - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r1, r0, r1 - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - bgt _080AF6CC - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080AF6D2 -_080AF6CC: - adds r0, r4, 0 - bl DestroyAnimSprite -_080AF6D2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AF690 - - thumb_func_start sub_80AF6D8 -sub_80AF6D8: @ 80AF6D8 - push {r4-r7,lr} - sub sp, 0x10 - adds r5, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r1, _080AF71C @ =gBattleAnimArgs - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - movs r2, 0xE - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080AF724 - ldr r4, _080AF720 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - b _080AF736 - .align 2, 0 -_080AF71C: .4byte gBattleAnimArgs -_080AF720: .4byte gBattleAnimTarget -_080AF724: - ldr r0, _080AF754 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x32 - adds r3, r5, 0 - adds r3, 0x36 - movs r1, 0x1 - bl SetAverageBattlerPositions -_080AF736: - ldr r0, _080AF758 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AF760 - ldr r0, _080AF75C @ =gBattleAnimArgs - ldrh r1, [r5, 0x32] - ldrh r2, [r0, 0x4] - subs r1, r2 - strh r1, [r5, 0x32] - adds r1, r0, 0 - b _080AF76A - .align 2, 0 -_080AF754: .4byte gBattleAnimTarget -_080AF758: .4byte gBattleAnimAttacker -_080AF75C: .4byte gBattleAnimArgs -_080AF760: - ldr r1, _080AF814 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - ldrh r2, [r5, 0x32] - adds r0, r2 - strh r0, [r5, 0x32] -_080AF76A: - ldrh r0, [r1, 0x6] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimFastLinearTranslationWithSpeed - adds r7, r5, 0 - adds r7, 0x2E - adds r2, r7, 0 - mov r1, sp - movs r4, 0x7 -_080AF782: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080AF782 - ldrh r0, [r5, 0x30] - movs r1, 0x1 - eors r0, r1 - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x32] - eors r0, r1 - strh r0, [r5, 0x32] -_080AF79E: - movs r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r5, 0 - bl AnimFastTranslateLinear - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r2, 0x24 - ldrsh r0, [r5, r2] - adds r1, r0 - adds r1, 0x10 - movs r0, 0x88 - lsls r0, 1 - cmp r1, r0 - bhi _080AF7D2 - movs r0, 0x22 - ldrsh r1, [r5, r0] - movs r2, 0x26 - ldrsh r0, [r5, r2] - adds r1, r0 - cmp r1, 0xA0 - bgt _080AF7D2 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080AF79E -_080AF7D2: - 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] - ldr r1, _080AF814 @ =gBattleAnimArgs - ldr r6, _080AF818 @ =sub_80AF81C - mov r3, sp - adds r2, r7, 0 - movs r4, 0x7 -_080AF7F2: - ldrh r0, [r3] - strh r0, [r2] - adds r3, 0x2 - adds r2, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080AF7F2 - ldrh r0, [r1, 0xA] - strh r0, [r5, 0x38] - ldrh r0, [r1, 0xC] - strh r0, [r5, 0x3A] - str r6, [r5, 0x1C] - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AF814: .4byte gBattleAnimArgs -_080AF818: .4byte sub_80AF81C - thumb_func_end sub_80AF6D8 - - thumb_func_start sub_80AF81C -sub_80AF81C: @ 80AF81C - push {r4,lr} - adds r4, r0, 0 - bl AnimFastTranslateLinear - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080AF830 - movs r0, 0x1 - strh r0, [r4, 0x2E] -_080AF830: - movs r2, 0x3C - ldrsh r0, [r4, r2] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3A] - ldrh r2, [r4, 0x3C] - adds r0, r2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080AF886 - movs r2, 0x20 - ldrsh r0, [r4, r2] - movs r2, 0x24 - ldrsh r1, [r4, r2] - adds r0, r1 - adds r0, 0x10 - movs r1, 0x88 - lsls r1, 1 - cmp r0, r1 - bhi _080AF880 - movs r0, 0x22 - ldrsh r1, [r4, r0] - movs r2, 0x26 - ldrsh r0, [r4, r2] - adds r1, r0 - cmp r1, 0xA0 - bgt _080AF880 - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _080AF886 -_080AF880: - adds r0, r4, 0 - bl DestroyAnimSprite -_080AF886: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AF81C - - thumb_func_start sub_80AF88C -sub_80AF88C: @ 80AF88C - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080AF8F8 - ldr r5, _080AF8AC @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080AF8B0 - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget - b _080AF8E6 - .align 2, 0 -_080AF8AC: .4byte gBattleAnimArgs -_080AF8B0: - ldr r0, _080AF8F0 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions - ldr r0, _080AF8F4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AF8D6 - ldrh r0, [r5] - negs r0, r0 - strh r0, [r5] -_080AF8D6: - ldrh r0, [r5] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] -_080AF8E6: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080AF90C - .align 2, 0 -_080AF8F0: .4byte gBattleAnimTarget -_080AF8F4: .4byte gBattleAnimAttacker -_080AF8F8: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080AF90C - adds r0, r4, 0 - bl DestroyAnimSprite -_080AF90C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80AF88C - - thumb_func_start sub_80AF914 -sub_80AF914: @ 80AF914 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080AF934 @ =gBattleAnimArgs - movs r1, 0x8 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080AF984 - movs r1, 0xA - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080AF938 - adds r0, r5, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - b _080AF976 - .align 2, 0 -_080AF934: .4byte gBattleAnimArgs -_080AF938: - ldr r4, _080AF960 @ =gBattleAnimAttacker - ldrb r0, [r4] - adds r2, r5, 0 - adds r2, 0x20 - adds r3, r5, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AF964 - ldrh r0, [r5, 0x20] - ldrh r1, [r6] - subs r0, r1 - b _080AF96A - .align 2, 0 -_080AF960: .4byte gBattleAnimAttacker -_080AF964: - ldrh r0, [r6] - ldrh r1, [r5, 0x20] - adds r0, r1 -_080AF96A: - strh r0, [r5, 0x20] - ldr r0, _080AF97C @ =gBattleAnimArgs - ldrh r0, [r0, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] -_080AF976: - ldr r0, _080AF980 @ =gBattleAnimAttacker - b _080AF9D4 - .align 2, 0 -_080AF97C: .4byte gBattleAnimArgs -_080AF980: .4byte gBattleAnimAttacker -_080AF984: - movs r1, 0xA - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080AF996 - adds r0, r5, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget - b _080AF9D2 -_080AF996: - ldr r4, _080AF9BC @ =gBattleAnimTarget - ldrb r0, [r4] - adds r2, r5, 0 - adds r2, 0x20 - adds r3, r5, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AF9C0 - ldrh r0, [r5, 0x20] - ldrh r1, [r6] - subs r0, r1 - b _080AF9C6 - .align 2, 0 -_080AF9BC: .4byte gBattleAnimTarget -_080AF9C0: - ldrh r0, [r6] - ldrh r1, [r5, 0x20] - adds r0, r1 -_080AF9C6: - strh r0, [r5, 0x20] - ldr r0, _080AF9F0 @ =gBattleAnimArgs - ldrh r0, [r0, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] -_080AF9D2: - ldr r0, _080AF9F4 @ =gBattleAnimTarget -_080AF9D4: - ldrb r0, [r0] - strh r0, [r5, 0x3C] - ldr r0, _080AF9F0 @ =gBattleAnimArgs - movs r1, 0xA - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080AF9EC - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _080AF9F8 -_080AF9EC: - movs r0, 0x20 - b _080AF9FA - .align 2, 0 -_080AF9F0: .4byte gBattleAnimArgs -_080AF9F4: .4byte gBattleAnimTarget -_080AF9F8: - movs r0, 0x40 -_080AF9FA: - strh r0, [r5, 0x3A] - ldr r0, _080AFA40 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AFA10 - ldrh r0, [r5, 0x22] - adds r0, 0x8 - strh r0, [r5, 0x22] -_080AFA10: - ldr r1, _080AFA44 @ =gBattleAnimArgs - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - ldrh r1, [r1, 0x4] - adds r0, r1 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimLinearTranslation - movs r0, 0x40 - strh r0, [r5, 0x38] - ldr r1, _080AFA48 @ =sub_80AFA4C - str r1, [r5, 0x1C] - adds r0, r5, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AFA40: .4byte gBattleAnimTarget -_080AFA44: .4byte gBattleAnimArgs -_080AFA48: .4byte sub_80AFA4C - thumb_func_end sub_80AF914 - - thumb_func_start sub_80AFA4C -sub_80AFA4C: @ 80AFA4C - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - bne _080AFAD6 - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r2, 0x3A - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r2, 0x38 - ldrsh r0, [r4, r2] - movs r1, 0x6 - negs r1, r1 - bl Cos - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x38] - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x7F - bhi _080AFAA8 - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - b _080AFACA -_080AFAA8: - ldrh r0, [r4, 0x3C] - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerSpriteBGPriority - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - lsls r0, 2 - ldrb r2, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x5] -_080AFACA: - ldrh r0, [r4, 0x38] - adds r0, 0x3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - b _080AFADC -_080AFAD6: - adds r0, r4, 0 - bl DestroyAnimSprite -_080AFADC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AFA4C - - thumb_func_start sub_80AFAE4 -sub_80AFAE4: @ 80AFAE4 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080AFBA0 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AFB26 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute -_080AFB26: - ldr r0, _080AFBA4 @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r4, _080AFBA8 @ =gBattle_BG1_Y - strh r1, [r4] - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - ldrh r1, [r4] - movs r0, 0x16 - bl SetGpuReg - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080AFBAC @ =gUnknown_83C3540 - movs r2, 0x80 - lsls r2, 4 - mov r3, sp - ldrh r3, [r3, 0xA] - bl LoadBgTiles - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080AFBB0 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap - bl AnimLoadCompressedBgTilemap - ldr r0, _080AFBB4 @ =gUnknown_83C2CE0 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadPalette - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080AFB88 - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80730C0 -_080AFB88: - ldr r0, _080AFBB8 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080AFBBC @ =sub_80AFBC0 - str r0, [r1] - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AFBA0: .4byte 0x00003f42 -_080AFBA4: .4byte gBattle_BG1_X -_080AFBA8: .4byte gBattle_BG1_Y -_080AFBAC: .4byte gUnknown_83C3540 -_080AFBB0: .4byte gFile_graphics_battle_anims_backgrounds_fog_tilemap -_080AFBB4: .4byte gUnknown_83C2CE0 -_080AFBB8: .4byte gTasks -_080AFBBC: .4byte sub_80AFBC0 - thumb_func_end sub_80AFAE4 - - thumb_func_start sub_80AFBC0 -sub_80AFBC0: @ 80AFBC0 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080AFBF4 @ =gBattle_BG1_X - ldr r2, _080AFBF8 @ =0x0000ffff - adds r0, r2, 0 - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - ldr r1, _080AFBFC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r2, 0x20 - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0x4 - bls _080AFBEA - b _080AFD36 -_080AFBEA: - lsls r0, 2 - ldr r1, _080AFC00 @ =_080AFC04 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080AFBF4: .4byte gBattle_BG1_X -_080AFBF8: .4byte 0x0000ffff -_080AFBFC: .4byte gTasks -_080AFC00: .4byte _080AFC04 - .align 2, 0 -_080AFC04: - .4byte _080AFC18 - .4byte _080AFC70 - .4byte _080AFC92 - .4byte _080AFCD6 - .4byte _080AFCF8 -_080AFC18: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r2 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - movs r5, 0 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - beq _080AFC32 - b _080AFD36 -_080AFC32: - strh r5, [r4, 0x1C] - ldrh r0, [r4, 0x1A] - adds r0, 0x1 - strh r0, [r4, 0x1A] - ldr r1, _080AFC6C @ =gUnknown_83E64D4 - movs r2, 0x1A - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r1, [r0] - strh r1, [r4, 0x1E] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0x9 - bne _080AFD36 - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - strh r5, [r4, 0x1E] - b _080AFD36 - .align 2, 0 -_080AFC6C: .4byte gUnknown_83E64D4 -_080AFC70: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r2 - ldrh r0, [r1, 0x1E] - adds r0, 0x1 - strh r0, [r1, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x51 - bne _080AFD36 - movs r0, 0x9 - strh r0, [r1, 0x1E] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - b _080AFD36 -_080AFC92: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r2 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080AFD36 - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r1, [r4, 0x1E] - subs r1, 0x1 - strh r1, [r4, 0x1E] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0x1E - ldrsh r1, [r4, r2] - cmp r1, 0 - bne _080AFD36 - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - strh r1, [r4, 0x1E] - b _080AFD36 -_080AFCD6: - mov r0, sp - bl sub_80752A0 - movs r0, 0x1 - bl sub_8075358 - movs r0, 0x2 - bl sub_8075358 - ldr r0, _080AFD40 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] -_080AFCF8: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AFD0C - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute -_080AFD0C: - ldr r0, _080AFD44 @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080AFD48 @ =gBattle_BG1_Y - strh r1, [r0] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080AFD36: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AFD40: .4byte gTasks -_080AFD44: .4byte gBattle_BG1_X -_080AFD48: .4byte gBattle_BG1_Y - thumb_func_end sub_80AFBC0 - - thumb_func_start sub_80AFD4C -sub_80AFD4C: @ 80AFD4C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080AFD78 @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r0, _080AFD7C @ =TranslateAnimSpriteToTargetMonLocation - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AFD78: .4byte gBattleAnimAttacker -_080AFD7C: .4byte TranslateAnimSpriteToTargetMonLocation - thumb_func_end sub_80AFD4C - - thumb_func_start sub_80AFD80 -sub_80AFD80: @ 80AFD80 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080AFE40 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AFDC2 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute -_080AFDC2: - ldr r0, _080AFE44 @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r4, _080AFE48 @ =gBattle_BG1_Y - strh r1, [r4] - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - ldrh r1, [r4] - movs r0, 0x16 - bl SetGpuReg - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080AFE4C @ =gUnknown_83C3540 - movs r2, 0x80 - lsls r2, 4 - mov r3, sp - ldrh r3, [r3, 0xA] - bl LoadBgTiles - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080AFE50 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap - bl AnimLoadCompressedBgTilemap - ldr r0, _080AFE54 @ =gUnknown_83C2CE0 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadPalette - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080AFE24 - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80730C0 -_080AFE24: - ldr r1, _080AFE58 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080AFE5C @ =0x0000ffff - strh r1, [r0, 0x26] - ldr r1, _080AFE60 @ =sub_80AFE64 - str r1, [r0] - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AFE40: .4byte 0x00003f42 -_080AFE44: .4byte gBattle_BG1_X -_080AFE48: .4byte gBattle_BG1_Y -_080AFE4C: .4byte gUnknown_83C3540 -_080AFE50: .4byte gFile_graphics_battle_anims_backgrounds_fog_tilemap -_080AFE54: .4byte gUnknown_83C2CE0 -_080AFE58: .4byte gTasks -_080AFE5C: .4byte 0x0000ffff -_080AFE60: .4byte sub_80AFE64 - thumb_func_end sub_80AFD80 - - thumb_func_start sub_80AFE64 -sub_80AFE64: @ 80AFE64 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _080AFE94 @ =gBattle_BG1_X - ldr r3, _080AFE98 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r3 - ldrh r0, [r1, 0x26] - ldrh r5, [r2] - adds r0, r5 - strh r0, [r2] - movs r2, 0x20 - ldrsh r0, [r1, r2] - cmp r0, 0x4 - bls _080AFE8A - b _080AFFBE -_080AFE8A: - lsls r0, 2 - ldr r1, _080AFE9C @ =_080AFEA0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080AFE94: .4byte gBattle_BG1_X -_080AFE98: .4byte gTasks -_080AFE9C: .4byte _080AFEA0 - .align 2, 0 -_080AFEA0: - .4byte _080AFEB4 - .4byte _080AFEF8 - .4byte _080AFF1A - .4byte _080AFF5E - .4byte _080AFF80 -_080AFEB4: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r3 - ldrh r0, [r4, 0x1A] - adds r0, 0x1 - strh r0, [r4, 0x1A] - ldr r1, _080AFEF4 @ =gUnknown_83E6500 - movs r5, 0x1A - ldrsh r0, [r4, r5] - adds r0, r1 - ldrb r1, [r0] - strh r1, [r4, 0x1E] - movs r0, 0x11 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bne _080AFFBE - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - movs r0, 0 - strh r0, [r4, 0x1E] - b _080AFFBE - .align 2, 0 -_080AFEF4: .4byte gUnknown_83E6500 -_080AFEF8: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r3 - ldrh r0, [r1, 0x1E] - adds r0, 0x1 - strh r0, [r1, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x51 - bne _080AFFBE - movs r0, 0x5 - strh r0, [r1, 0x1E] - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - b _080AFFBE -_080AFF1A: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r3 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080AFFBE - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r1, [r4, 0x1E] - subs r1, 0x1 - strh r1, [r4, 0x1E] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0x1E - ldrsh r1, [r4, r2] - cmp r1, 0 - bne _080AFFBE - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - strh r1, [r4, 0x1E] - b _080AFFBE -_080AFF5E: - mov r0, sp - bl sub_80752A0 - movs r0, 0x1 - bl sub_8075358 - movs r0, 0x2 - bl sub_8075358 - ldr r0, _080AFFC8 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] -_080AFF80: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AFF94 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute -_080AFF94: - ldr r0, _080AFFCC @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080AFFD0 @ =gBattle_BG1_Y - strh r1, [r0] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080AFFBE: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AFFC8: .4byte gTasks -_080AFFCC: .4byte gBattle_BG1_X -_080AFFD0: .4byte gBattle_BG1_Y - thumb_func_end sub_80AFE64 - - thumb_func_start sub_80AFFD4 -sub_80AFFD4: @ 80AFFD4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldr r6, _080B00BC @ =gBattleAnimArgs - ldrh r0, [r6] - strh r0, [r5, 0x2E] - ldr r0, _080B00C0 @ =gBattleAnimAttacker - mov r8, r0 - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - ldr r7, _080B00C4 @ =gBattleAnimTarget - ldrb r0, [r7] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bcs _080B0008 - movs r0, 0x80 - lsls r0, 8 - strh r0, [r5, 0x3C] -_080B0008: - ldr r3, _080B00C8 @ =gBattlerPositions - ldrb r0, [r7] - adds r0, r3 - ldrb r1, [r0] - movs r2, 0x1 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080B0068 - ldrh r0, [r6, 0x2] - negs r0, r0 - strh r0, [r6, 0x2] - ldrh r0, [r6, 0x6] - negs r0, r0 - strh r0, [r6, 0x6] - movs r1, 0x3C - ldrsh r0, [r5, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _080B0064 - mov r1, r8 - ldrb r0, [r1] - adds r0, r3 - ldrb r1, [r0] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080B0064 - movs r0, 0x1 - bl GetAnimBattlerSpriteId - ldr r2, _080B00CC @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x43 - ldrb r0, [r1] - adds r0, 0x1 - adds r1, r5, 0 - adds r1, 0x43 - strb r0, [r1] -_080B0064: - movs r0, 0x1 - strh r0, [r5, 0x3A] -_080B0068: - ldr r4, _080B00C0 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r6, _080B00BC @ =gBattleAnimArgs - movs r1, 0xE - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _080B00D0 - ldrh r0, [r6, 0x2] - ldrh r1, [r5, 0x20] - adds r0, r1 - strh r0, [r5, 0x30] - ldr r4, _080B00C4 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x6] - adds r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r6, 0x4] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x3 - b _080B00F8 - .align 2, 0 -_080B00BC: .4byte gBattleAnimArgs -_080B00C0: .4byte gBattleAnimAttacker -_080B00C4: .4byte gBattleAnimTarget -_080B00C8: .4byte gBattlerPositions -_080B00CC: .4byte gSprites -_080B00D0: - ldrh r0, [r6, 0x2] - ldrh r1, [r5, 0x20] - adds r0, r1 - strh r0, [r5, 0x30] - ldr r4, _080B0140 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x6] - adds r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r6, 0x4] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x1 -_080B00F8: - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x8] - adds r0, r6 - strh r0, [r5, 0x36] - ldrb r0, [r4] - bl GetBattlerSpriteBGPriority - lsls r0, 24 - lsrs r0, 16 - ldrh r1, [r5, 0x3C] - orrs r0, r1 - strh r0, [r5, 0x3C] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B012C - movs r0, 0x1 - strh r0, [r5, 0x3A] - adds r1, r5, 0 - adds r1, 0x43 - movs r0, 0x80 - strb r0, [r1] -_080B012C: - adds r0, r5, 0 - bl InitAnimLinearTranslation - ldr r0, _080B0144 @ =sub_80B0148 - str r0, [r5, 0x1C] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B0140: .4byte gBattleAnimTarget -_080B0144: .4byte sub_80B0148 - thumb_func_end sub_80AFFD4 - - thumb_func_start sub_80B0148 -sub_80B0148: @ 80B0148 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x3C] - movs r5, 0xFF - movs r1, 0xFF - ands r1, r0 - cmp r1, 0x1 - beq _080B0230 - cmp r1, 0x1 - bgt _080B0162 - cmp r1, 0 - beq _080B016A - b _080B0380 -_080B0162: - cmp r1, 0x2 - bne _080B0168 - b _080B0344 -_080B0168: - b _080B0380 -_080B016A: - adds r0, r4, 0 - bl AnimTranslateLinear - ldr r1, _080B0194 @ =gSineTable - movs r2, 0x38 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - asrs r0, 4 - ldrh r2, [r4, 0x24] - adds r0, r2 - strh r0, [r4, 0x24] - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080B0198 - ldrh r0, [r4, 0x38] - subs r0, 0x8 - b _080B019C - .align 2, 0 -_080B0194: .4byte gSineTable -_080B0198: - ldrh r0, [r4, 0x38] - adds r0, 0x8 -_080B019C: - ands r0, r5 - strh r0, [r4, 0x38] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080B01AA - b _080B0380 -_080B01AA: - movs r5, 0x50 - strh r5, [r4, 0x2E] - ldr r6, _080B01F8 @ =gBattleAnimTarget - ldrb r0, [r6] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - strh r0, [r4, 0x30] - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, 0x1D - strh r0, [r4, 0x36] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B0200 - ldr r1, _080B01FC @ =gBattlerPositions - ldrb r0, [r6] - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B0200 - movs r0, 0xCC - strh r0, [r4, 0x38] - b _080B0202 - .align 2, 0 -_080B01F8: .4byte gBattleAnimTarget -_080B01FC: .4byte gBattlerPositions -_080B0200: - strh r5, [r4, 0x38] -_080B0202: - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080B022C @ =gSineTable - movs r2, 0x38 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - asrs r0, 3 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x38] - adds r0, 0x2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimLinearTranslation - b _080B0380 - .align 2, 0 -_080B022C: .4byte gSineTable -_080B0230: - adds r0, r4, 0 - bl AnimTranslateLinear - ldr r1, _080B028C @ =gSineTable - movs r2, 0x38 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - asrs r0, 3 - ldrh r2, [r4, 0x24] - adds r0, r2 - strh r0, [r4, 0x24] - movs r2, 0x38 - ldrsh r0, [r4, r2] - adds r0, 0x40 - lsls r0, 1 - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 1 - adds r0, r1 - negs r0, r0 - asrs r0, 8 - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B02AE - ldrh r1, [r4, 0x38] - adds r0, r1, 0 - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - adds r3, r1, 0 - cmp r0, 0x7F - bhi _080B0290 - ldrh r1, [r4, 0x3C] - lsls r1, 16 - asrs r1, 24 - b _080B0298 - .align 2, 0 -_080B028C: .4byte gSineTable -_080B0290: - ldrh r1, [r4, 0x3C] - lsls r1, 16 - asrs r1, 24 - adds r1, 0x1 -_080B0298: - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - adds r0, r3, 0x4 - b _080B02CE -_080B02AE: - ldrh r0, [r4, 0x38] - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x7F - bhi _080B02C2 - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x80 - b _080B02C8 -_080B02C2: - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x8C -_080B02C8: - strb r0, [r1] - ldrh r0, [r4, 0x38] - subs r0, 0x4 -_080B02CE: - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - bgt _080B0380 - movs r5, 0 - movs r0, 0xC0 - lsls r0, 2 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, 0x4 - strh r0, [r4, 0x36] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B0328 - ldr r1, _080B0320 @ =gBattlerPositions - ldr r0, _080B0324 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B0328 - movs r0, 0x80 - lsls r0, 1 - b _080B032A - .align 2, 0 -_080B0320: .4byte gBattlerPositions -_080B0324: .4byte gBattleAnimTarget -_080B0328: - ldr r0, _080B0340 @ =0x0000fff0 -_080B032A: - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x3C] - strh r1, [r4, 0x26] - strh r1, [r4, 0x24] - adds r0, r4, 0 - bl sub_8075678 - b _080B0380 - .align 2, 0 -_080B0340: .4byte 0x0000fff0 -_080B0344: - adds r0, r4, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080B0380 - ldrb r0, [r4, 0x1] - lsls r0, 30 - lsrs r0, 30 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B0372 - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] -_080B0372: - adds r0, r4, 0 - bl DestroySprite - ldr r1, _080B0388 @ =gAnimVisualTaskCount - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_080B0380: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B0388: .4byte gAnimVisualTaskCount - thumb_func_end sub_80B0148 - - thumb_func_start sub_80B038C -sub_80B038C: @ 80B038C - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B03A0 @ =gTasks - adds r1, r0 - ldr r0, _080B03A4 @ =sub_80B03A8 - str r0, [r1] - bx lr - .align 2, 0 -_080B03A0: .4byte gTasks -_080B03A4: .4byte sub_80B03A8 - thumb_func_end sub_80B038C - - thumb_func_start sub_80B03A8 -sub_80B03A8: @ 80B03A8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B03CC @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _080B03EC - cmp r5, 0x1 - bgt _080B03D0 - cmp r5, 0 - beq _080B03D6 - b _080B0450 - .align 2, 0 -_080B03CC: .4byte gTasks -_080B03D0: - cmp r5, 0x2 - beq _080B0442 - b _080B0450 -_080B03D6: - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080B0450 - strh r5, [r4, 0x10] - strh r5, [r4, 0x12] - strh r5, [r4, 0xC] - b _080B0428 -_080B03EC: - ldrh r1, [r4, 0x12] - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _080B043C - ldrb r0, [r4, 0xE] - ldrb r1, [r4, 0xC] - movs r3, 0x1 - bl sub_80B0458 - lsls r0, 24 - cmp r0, 0 - beq _080B040C - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] -_080B040C: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080B0438 - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _080B0430 -_080B0428: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B0450 -_080B0430: - ldrh r0, [r4, 0x8] - subs r0, 0x1 - strh r0, [r4, 0x8] - b _080B0450 -_080B0438: - strh r5, [r4, 0x12] - b _080B0450 -_080B043C: - subs r0, r1, 0x1 - strh r0, [r4, 0x12] - b _080B0450 -_080B0442: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B0450 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B0450: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B03A8 - - thumb_func_start sub_80B0458 -sub_80B0458: @ 80B0458 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp] - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - movs r1, 0 - str r1, [sp, 0x4] - ldr r1, _080B04D0 @ =gUnknown_83E652C - lsrs r0, 22 - adds r4, r0, r1 - ldrb r0, [r4, 0x3] - lsls r0, 24 - asrs r0, 28 - mov r8, r0 - cmp r0, 0x2 - beq _080B0544 - ldrh r0, [r4, 0x2] - lsls r0, 20 - lsrs r0, 24 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B0544 - movs r0, 0x1 - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r5, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - mov r1, r8 - cmp r1, 0 - beq _080B04D4 - cmp r1, 0x1 - beq _080B050A - b _080B0556 - .align 2, 0 -_080B04D0: .4byte gUnknown_83E652C -_080B04D4: - adds r0, r5, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r7, 16 - asrs r1, 16 - subs r1, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r5, 0 - movs r1, 0 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r6, 16 - asrs r1, 16 - subs r1, r0 - b _080B053E -_080B050A: - adds r0, r5, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r7, 16 - asrs r1, 16 - adds r1, r0 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r5, 0 - movs r1, 0 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - movs r1, 0x6 - bl __divsi3 - lsls r1, r6, 16 - asrs r1, 16 - adds r1, r0 -_080B053E: - lsls r1, 16 - lsrs r6, r1, 16 - b _080B0556 -_080B0544: - ldrh r0, [r4] - lsls r0, 22 - asrs r0, 6 - lsrs r7, r0, 16 - ldr r0, [r4] - lsls r0, 12 - asrs r0, 22 - lsls r0, 16 - lsrs r6, r0, 16 -_080B0556: - lsls r0, r6, 16 - asrs r0, 16 - adds r0, 0x8 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - lsls r1, r7, 16 - asrs r1, 16 - subs r1, r0 - ldr r0, _080B05B0 @ =gUnknown_83E65A4 - lsls r1, 16 - asrs r1, 16 - movs r2, 0x8 - negs r2, r2 - movs r3, 0x12 - bl CreateSprite - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x40 - beq _080B05B8 - lsls r4, r5, 4 - adds r4, r5 - lsls r4, 2 - ldr r0, _080B05B4 @ =gSprites - adds r4, r0 - adds r0, r4, 0 - mov r1, r9 - bl StartSpriteAffineAnim - mov r0, sp - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - strh r7, [r4, 0x34] - strh r6, [r4, 0x36] - mov r1, r9 - strh r1, [r4, 0x38] - mov r0, sp - ldrh r0, [r0] - strh r0, [r4, 0x3A] - mov r1, r10 - strh r1, [r4, 0x3C] - movs r0, 0x1 - b _080B05BA - .align 2, 0 -_080B05B0: .4byte gUnknown_83E65A4 -_080B05B4: .4byte gSprites -_080B05B8: - movs r0, 0 -_080B05BA: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80B0458 - - thumb_func_start sub_80B05CC -sub_80B05CC: @ 80B05CC - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - adds r0, 0x4 - strh r0, [r4, 0x20] - ldrh r1, [r4, 0x22] - adds r2, r1, 0 - adds r2, 0x8 - strh r2, [r4, 0x22] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x34 - ldrsh r1, [r4, r3] - cmp r0, r1 - bge _080B05F6 - lsls r0, r2, 16 - asrs r0, 16 - movs r2, 0x36 - ldrsh r1, [r4, r2] - cmp r0, r1 - blt _080B06A6 -_080B05F6: - movs r3, 0x2E - ldrsh r0, [r4, r3] - cmp r0, 0x1 - bne _080B0678 - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B0678 - ldr r0, _080B066C @ =gUnknown_83E63E0 - movs r2, 0x34 - ldrsh r1, [r4, r2] - movs r3, 0x36 - ldrsh r2, [r4, r3] - adds r3, r4, 0 - adds r3, 0x43 - ldrb r3, [r3] - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x2E] - cmp r0, 0x40 - beq _080B065A - ldr r2, _080B0670 @ =gSprites - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r2, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _080B0674 @ =sub_80B06B0 - str r1, [r0] - movs r3, 0x2E - ldrsh r1, [r4, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x3A] - strh r1, [r0, 0x3A] - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x3C] - strh r1, [r0, 0x3C] -_080B065A: - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite - b _080B06A6 - .align 2, 0 -_080B066C: .4byte gUnknown_83E63E0 -_080B0670: .4byte gSprites -_080B0674: .4byte sub_80B06B0 -_080B0678: - ldr r3, _080B06AC @ =gTasks - movs r2, 0x3C - ldrsh r1, [r4, r2] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080B06A6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B06AC: .4byte gTasks - thumb_func_end sub_80B05CC - - thumb_func_start sub_80B06B0 -sub_80B06B0: @ 80B06B0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080B06F0 - ldr r3, _080B06F8 @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080B06F0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B06F8: .4byte gTasks - thumb_func_end sub_80B06B0 - - thumb_func_start unc_080B06FC -unc_080B06FC: @ 80B06FC - push {r4-r6,lr} - adds r5, r0, 0 - ldr r0, _080B077C @ =gAnimDisableStructPtr - ldr r0, [r0] - ldrb r1, [r0, 0x11] - lsrs r0, r1, 4 - lsls r1, 28 - lsrs r1, 28 - subs r0, r1 - subs r0, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x4 - bls _080B071A - movs r1, 0x4 -_080B071A: - adds r0, r5, 0 - bl StartSpriteAffineAnim - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r6, _080B0780 @ =gBattleAnimArgs - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x2E] - ldr r0, _080B0784 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B0742 - ldrh r0, [r6, 0x4] - negs r0, r0 - strh r0, [r6, 0x4] -_080B0742: - ldr r4, _080B0788 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x4] - adds r0, r1 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x6] - adds r0, r1 - strh r0, [r5, 0x36] - ldrh r0, [r6, 0xA] - strh r0, [r5, 0x38] - adds r0, r5, 0 - bl InitAnimArcTranslation - ldr r0, _080B078C @ =sub_80B0790 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B077C: .4byte gAnimDisableStructPtr -_080B0780: .4byte gBattleAnimArgs -_080B0784: .4byte gBattleAnimAttacker -_080B0788: .4byte gBattleAnimTarget -_080B078C: .4byte sub_80B0790 - thumb_func_end unc_080B06FC - - thumb_func_start sub_80B0790 -sub_80B0790: @ 80B0790 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B07B2 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, _080B07B8 @ =RunStoredCallbackWhenAnimEnds - str r0, [r4, 0x1C] - ldr r1, _080B07BC @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 -_080B07B2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B07B8: .4byte RunStoredCallbackWhenAnimEnds -_080B07BC: .4byte DestroyAnimSprite - thumb_func_end sub_80B0790 - - thumb_func_start sub_80B07C0 -sub_80B07C0: @ 80B07C0 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x8 - ldr r3, _080B0814 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080B0818 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - bl Random - movs r5, 0xFF - ands r5, r0 - movs r0, 0x80 - lsls r0, 1 - adds r6, r0, 0 - orrs r5, r6 - bl Random - ldr r1, _080B081C @ =0x000001ff - ands r1, r0 - adds r0, r1, 0 - cmp r0, 0xFF - ble _080B0806 - subs r0, r6, r0 - lsls r0, 16 - lsrs r1, r0, 16 -_080B0806: - strh r5, [r4, 0x30] - strh r1, [r4, 0x32] - ldr r0, _080B0820 @ =sub_80B0824 - str r0, [r4, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B0814: .4byte 0x000003ff -_080B0818: .4byte 0xfffffc00 -_080B081C: .4byte 0x000001ff -_080B0820: .4byte sub_80B0824 - thumb_func_end sub_80B07C0 - - thumb_func_start sub_80B0824 -sub_80B0824: @ 80B0824 - push {r4,lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x34] - adds r3, r0, r1 - strh r3, [r2, 0x34] - ldrh r1, [r2, 0x32] - ldrh r4, [r2, 0x36] - adds r1, r4 - strh r1, [r2, 0x36] - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080B0848 - lsls r0, r3, 16 - asrs r0, 24 - negs r0, r0 - b _080B084C -_080B0848: - lsls r0, r3, 16 - asrs r0, 24 -_080B084C: - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2, 0x26] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _080B086A - adds r0, r2, 0 - bl DestroyAnimSprite -_080B086A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B0824 - - thumb_func_start sub_80B0870 -sub_80B0870: @ 80B0870 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080B0898 @ =gBattleAnimArgs - ldrb r3, [r1] - lsls r3, 1 - adds r3, r1 - ldr r1, _080B089C @ =gAnimDisableStructPtr - ldr r1, [r1] - ldrb r1, [r1, 0x11] - lsrs r2, r1, 4 - lsls r1, 28 - lsrs r1, 28 - subs r2, r1 - subs r2, 0x1 - strh r2, [r3] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080B0898: .4byte gBattleAnimArgs -_080B089C: .4byte gAnimDisableStructPtr - thumb_func_end sub_80B0870 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/poison.s b/asm/poison.s deleted file mode 100644 index 0028cf7d8..000000000 --- a/asm/poison.s +++ /dev/null @@ -1,362 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B1620 -sub_80B1620: @ 80B1620 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B1674 @ =gBattleAnimArgs - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B1636 - adds r0, r5, 0 - movs r1, 0x2 - bl StartSpriteAnim -_080B1636: - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldrh r0, [r4, 0x4] - strh r0, [r5, 0x2E] - ldr r4, _080B1678 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - ldr r0, _080B167C @ =0x0000ffe2 - strh r0, [r5, 0x38] - adds r0, r5, 0 - bl InitAnimArcTranslation - ldr r0, _080B1680 @ =sub_80B1684 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1674: .4byte gBattleAnimArgs -_080B1678: .4byte gBattleAnimTarget -_080B167C: .4byte 0x0000ffe2 -_080B1680: .4byte sub_80B1684 - thumb_func_end sub_80B1620 - - thumb_func_start sub_80B1684 -sub_80B1684: @ 80B1684 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B1698 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B1698: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B1684 - - thumb_func_start sub_80B16A0 -sub_80B16A0: @ 80B16A0 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r5, _080B1714 @ =gBattleAnimArgs - movs r1, 0x6 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080B16B8 - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim -_080B16B8: - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080B1718 @ =gBattleAnimTarget - ldrb r0, [r0] - mov r6, sp - adds r6, 0x2 - movs r1, 0x1 - mov r2, sp - adds r3, r6, 0 - bl SetAverageBattlerPositions - ldr r0, _080B171C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B16E6 - ldrh r0, [r5, 0x8] - negs r0, r0 - strh r0, [r5, 0x8] -_080B16E6: - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x2E] - mov r1, sp - ldrh r0, [r5, 0x8] - ldrh r1, [r1] - adds r0, r1 - strh r0, [r4, 0x32] - ldrh r0, [r5, 0xA] - ldrh r6, [r6] - adds r0, r6 - strh r0, [r4, 0x36] - ldr r0, _080B1720 @ =0x0000ffe2 - strh r0, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimArcTranslation - ldr r0, _080B1724 @ =sub_80B1728 - str r0, [r4, 0x1C] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B1714: .4byte gBattleAnimArgs -_080B1718: .4byte gBattleAnimTarget -_080B171C: .4byte gBattleAnimAttacker -_080B1720: .4byte 0x0000ffe2 -_080B1724: .4byte sub_80B1728 - thumb_func_end sub_80B16A0 - - thumb_func_start sub_80B1728 -sub_80B1728: @ 80B1728 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B173C - adds r0, r4, 0 - bl DestroyAnimSprite -_080B173C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B1728 - - thumb_func_start sub_80B1744 -sub_80B1744: @ 80B1744 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B1790 @ =gBattleAnimArgs - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r1, [r5] - adds r0, r1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - ldrh r1, [r5, 0x2] - adds r0, r1 - strh r0, [r4, 0x36] - adds r0, r4, 0 - bl InitSpriteDataForLinearTranslation - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r2, 0x4 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r4, 0x38] - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r2, 0x4 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r4, 0x3A] - ldr r0, _080B1794 @ =sub_80B1798 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1790: .4byte gBattleAnimArgs -_080B1794: .4byte sub_80B1798 - thumb_func_end sub_80B1744 - - thumb_func_start sub_80B1798 -sub_80B1798: @ 80B1798 - push {r4,lr} - adds r4, r0, 0 - bl TranslateSpriteLinearFixedPoint - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x38] - subs r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x32] - ldrh r1, [r4, 0x3A] - subs r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B17BE - adds r0, r4, 0 - bl DestroyAnimSprite -_080B17BE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B1798 - - thumb_func_start sub_80B17C4 -sub_80B17C4: @ 80B17C4 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B1824 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0x1 - bl SetAverageBattlerPositions - ldr r0, _080B1828 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B17F0 - ldr r1, _080B182C @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] -_080B17F0: - ldr r0, _080B182C @ =gBattleAnimArgs - ldrh r2, [r0] - ldrh r1, [r4, 0x20] - adds r2, r1 - strh r2, [r4, 0x20] - ldrh r1, [r0, 0x2] - ldrh r3, [r4, 0x22] - adds r1, r3 - strh r1, [r4, 0x22] - ldrh r3, [r0, 0x8] - strh r3, [r4, 0x2E] - ldrh r0, [r0, 0x4] - adds r2, r0 - strh r2, [r4, 0x32] - adds r1, r3 - strh r1, [r4, 0x36] - ldr r0, _080B1830 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - ldr r1, _080B1834 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B1824: .4byte gBattleAnimTarget -_080B1828: .4byte gBattleAnimAttacker -_080B182C: .4byte gBattleAnimArgs -_080B1830: .4byte StartAnimLinearTranslation -_080B1834: .4byte DestroyAnimSprite - thumb_func_end sub_80B17C4 - - thumb_func_start sub_80B1838 -sub_80B1838: @ 80B1838 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B1850 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080B1854 - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - b _080B188A - .align 2, 0 -_080B1850: .4byte gBattleAnimArgs -_080B1854: - ldr r0, _080B1894 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0x1 - bl SetAverageBattlerPositions - ldr r0, _080B1898 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B187A - ldrh r0, [r5] - negs r0, r0 - strh r0, [r5] -_080B187A: - ldrh r0, [r5] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] -_080B188A: - ldr r0, _080B189C @ =sub_80B18A0 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1894: .4byte gBattleAnimTarget -_080B1898: .4byte gBattleAnimAttacker -_080B189C: .4byte sub_80B18A0 - thumb_func_end sub_80B1838 - - thumb_func_start sub_80B18A0 -sub_80B18A0: @ 80B18A0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0xB - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0x4 - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x30] - adds r0, 0x30 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 24 - negs r0, r0 - strh r0, [r4, 0x26] - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080B18DC - adds r0, r4, 0 - bl DestroyAnimSprite -_080B18DC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B18A0 - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/battle_controller_pokedude.txt b/common_syms/battle_controller_pokedude.txt new file mode 100644 index 000000000..4986343f1 --- /dev/null +++ b/common_syms/battle_controller_pokedude.txt @@ -0,0 +1 @@ +gUnknown_3005EE0 diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s index 69424e5c6..e9e96f2c8 100644 --- a/data/battle_anim_effects_misc.s +++ b/data/battle_anim_effects_misc.s @@ -499,7 +499,10 @@ gUnknown_83E5A38:: .incbin "baserom.gba", 0x3E5A38, 0x18 gUnknown_83E5A50:: - .incbin "baserom.gba", 0x3E5A50, 0x30 + .incbin "baserom.gba", 0x3E5A50, 0x28 + +gUnknown_83E5A78:: + .incbin "baserom.gba", 0x3E5A78, 0x8 gUnknown_83E5A80:: .incbin "baserom.gba", 0x3E5A80, 0x18 @@ -522,265 +525,5 @@ gUnknown_83E5B70:: gUnknown_83E5B88:: @ 83E5B88 .incbin "baserom.gba", 0x3E5B88, 0x18 -gUnknown_83E5BA0:: - .incbin "baserom.gba", 0x3E5BA0, 0x40 - -gUnknown_83E5BE0:: - .incbin "baserom.gba", 0x3E5BE0, 0x18 - -gUnknown_83E5BF8:: - .incbin "baserom.gba", 0x3E5BF8, 0x78 - -gUnknown_83E5C70:: - .incbin "baserom.gba", 0x3E5C70, 0x18 - -gUnknown_83E5C88:: - .incbin "baserom.gba", 0x3E5C88, 0x18 - -gUnknown_83E5CA0:: - .incbin "baserom.gba", 0x3E5CA0, 0x78 - -gUnknown_83E5D18:: - .incbin "baserom.gba", 0x3E5D18, 0x30 - -@ ================ -gUnknown_83E5D48:: @ 83E5D48 - .incbin "baserom.gba", 0x3E5D48, 0x4 - -gUnknown_83E5D4C:: - .incbin "baserom.gba", 0x3E5D4C, 0x18 - -gUnknown_83E5D64:: - .incbin "baserom.gba", 0x3E5D64, 0x18 - -gUnknown_83E5D7C:: - .incbin "baserom.gba", 0x3E5D7C, 0x18 - -gUnknown_83E5D94:: - .incbin "baserom.gba", 0x3E5D94, 0x50 - -gUnknown_83E5DE4:: - .incbin "baserom.gba", 0x3E5DE4, 0x18 - -gUnknown_83E5DFC:: - .incbin "baserom.gba", 0x3E5DFC, 0x18 - -gUnknown_83E5E14:: - .incbin "baserom.gba", 0x3E5E14, 0x18 - -gUnknown_83E5E2C:: @ 83E5E2C - .incbin "baserom.gba", 0x3E5E2C, 0x18 - -gUnknown_83E5E44:: @ 83E5E44 - .incbin "baserom.gba", 0x3E5E44, 0x2 - -gUnknown_83E5E46:: @ 83E5E46 - .incbin "baserom.gba", 0x3E5E46, 0x1A - -gUnknown_83E5E60:: - .incbin "baserom.gba", 0x3E5E60, 0x54 - -gUnknown_83E5EB4:: - .incbin "baserom.gba", 0x3E5EB4, 0x30 - -gUnknown_83E5EE4:: - .incbin "baserom.gba", 0x3E5EE4, 0x18 - -gUnknown_83E5EFC:: @ 83E5EFC - .incbin "baserom.gba", 0x3E5EFC, 0x10 - -gUnknown_83E5F0C:: @ 83E5F0C - .incbin "baserom.gba", 0x3E5F0C, 0x2C - -gUnknown_83E5F38:: @ 83E5F38 - .incbin "baserom.gba", 0x3E5F38, 0x8C - -gUnknown_83E5FC4:: - .incbin "baserom.gba", 0x3E5FC4, 0x18 - -gUnknown_83E5FDC:: - .incbin "baserom.gba", 0x3E5FDC, 0x2C - -gUnknown_83E6008:: - .incbin "baserom.gba", 0x3E6008, 0x50 - -gUnknown_83E6058:: - .incbin "baserom.gba", 0x3E6058, 0x18 - -gUnknown_83E6070:: - .incbin "baserom.gba", 0x3E6070, 0x18 - -gUnknown_83E6088:: - .incbin "baserom.gba", 0x3E6088, 0x18 - -gUnknown_83E60A0:: @ 83E60A0 - .incbin "baserom.gba", 0x3E60A0, 0x18 - -gUnknown_83E60B8:: @ 83E60B8 - .incbin "baserom.gba", 0x3E60B8, 0x18 - -gUnknown_83E60D0:: @ 83E60D0 - .incbin "baserom.gba", 0x3E60D0, 0x50 - -gUnknown_83E6120:: @ 83E6120 - .incbin "baserom.gba", 0x3E6120, 0xB4 - -gUnknown_83E61D4:: - .incbin "baserom.gba", 0x3E61D4, 0x30 - -gUnknown_83E6204:: - .incbin "baserom.gba", 0x3E6204, 0x18 - -gUnknown_83E621C:: - .incbin "baserom.gba", 0x3E621C, 0x5C - -gUnknown_83E6278:: @ 83E6278 - .incbin "baserom.gba", 0x3E6278, 0x18 - -gUnknown_83E6290:: - .incbin "baserom.gba", 0x3E6290, 0x18 - -gUnknown_83E62A8:: @ 83E62A8 - .incbin "baserom.gba", 0x3E62A8, 0xA0 - -gUnknown_83E6348:: - .incbin "baserom.gba", 0x3E6348, 0x18 - -gUnknown_83E6360:: - .incbin "baserom.gba", 0x3E6360, 0x2C - -gUnknown_83E638C:: - .incbin "baserom.gba", 0x3E638C, 0x18 - -gUnknown_83E63A4:: - .incbin "baserom.gba", 0x3E63A4, 0x3C - -gUnknown_83E63E0:: @ 83E63E0 - .incbin "baserom.gba", 0x3E63E0, 0x18 - -gUnknown_83E63F8:: - .incbin "baserom.gba", 0x3E63F8, 0x18 - -gUnknown_83E6410:: - .incbin "baserom.gba", 0x3E6410, 0x18 - -gUnknown_83E6428:: - .incbin "baserom.gba", 0x3E6428, 0x18 - -gUnknown_83E6440:: - .incbin "baserom.gba", 0x3E6440, 0x3C - -gUnknown_83E647C:: - .incbin "baserom.gba", 0x3E647C, 0x28 - -gUnknown_83E64A4:: - .incbin "baserom.gba", 0x3E64A4, 0x18 - -gUnknown_83E64BC:: - .incbin "baserom.gba", 0x3E64BC, 0x18 - -gUnknown_83E64D4:: @ 83E64D4 - .incbin "baserom.gba", 0x3E64D4, 0x14 - -gUnknown_83E64E8:: - .incbin "baserom.gba", 0x3E64E8, 0x18 - -gUnknown_83E6500:: @ 83E6500 - .incbin "baserom.gba", 0x3E6500, 0x14 - -gUnknown_83E6514:: - .incbin "baserom.gba", 0x3E6514, 0x18 - -gUnknown_83E652C:: @ 83E652C - .incbin "baserom.gba", 0x3E652C, 0x78 - -gUnknown_83E65A4:: @ 83E65A4 - .incbin "baserom.gba", 0x3E65A4, 0x18 - -gUnknown_83E65BC:: - .incbin "baserom.gba", 0x3E65BC, 0xA0 - -gUnknown_83E665C:: - .incbin "baserom.gba", 0x3E665C, 0x18 - -gUnknown_83E6674:: - .incbin "baserom.gba", 0x3E6674, 0x6C - -gUnknown_83E66E0:: - .incbin "baserom.gba", 0x3E66E0, 0x18 - -gUnknown_83E66F8:: - .incbin "baserom.gba", 0x3E66F8, 0x18 - -gUnknown_83E6710:: - .incbin "baserom.gba", 0x3E6710, 0x18 - -gUnknown_83E6728:: - .incbin "baserom.gba", 0x3E6728, 0x18 - -gUnknown_83E6740:: - .incbin "baserom.gba", 0x3E6740, 0x18 - -gUnknown_83E6758:: - .incbin "baserom.gba", 0x3E6758, 0x34 - -gUnknown_83E678C:: - .incbin "baserom.gba", 0x3E678C, 0x34 - -gUnknown_83E67C0:: - .incbin "baserom.gba", 0x3E67C0, 0x18 - -gUnknown_83E67D8:: - .incbin "baserom.gba", 0x3E67D8, 0x18 - -gUnknown_83E67F0:: - .incbin "baserom.gba", 0x3E67F0, 0x18 - -gUnknown_83E6808:: - .incbin "baserom.gba", 0x3E6808, 0x18 - -gUnknown_83E6820:: - .incbin "baserom.gba", 0x3E6820, 0x44 - -gUnknown_83E6864:: - .incbin "baserom.gba", 0x3E6864, 0x18 - -gUnknown_83E687C:: - .incbin "baserom.gba", 0x3E687C, 0x18 - -gUnknown_83E6894:: - .incbin "baserom.gba", 0x3E6894, 0x18 - -gUnknown_83E68AC:: - .incbin "baserom.gba", 0x3E68AC, 0x54 - -gUnknown_83E6900:: - .incbin "baserom.gba", 0x3E6900, 0x48 - -gUnknown_83E6948:: - .incbin "baserom.gba", 0x3E6948, 0x34 - -gUnknown_83E697C:: - .incbin "baserom.gba", 0x3E697C, 0x30 - -gUnknown_83E69AC:: - .incbin "baserom.gba", 0x3E69AC, 0x74 - -gUnknown_83E6A20:: - .incbin "baserom.gba", 0x3E6A20, 0x18 - -gUnknown_83E6A38:: - .incbin "baserom.gba", 0x3E6A38, 0x18 - -gUnknown_83E6A50:: - .incbin "baserom.gba", 0x3E6A50, 0x34 - -gUnknown_83E6A84:: - .incbin "baserom.gba", 0x3E6A84, 0x34 - -gUnknown_83E6AB8:: - .incbin "baserom.gba", 0x3E6AB8, 0x18 - -gUnknown_83E6AD0:: - .incbin "baserom.gba", 0x3E6AD0, 0x18 - +gUnknown_83E5BA0:: @ 83E5BA0 + .incbin "baserom.gba", 0x3E5BA0, 0x18 diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 8f5348fd2..cf4cf25cb 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -924,11 +924,11 @@ Move_LEECH_SEED:: @ 81C7C23 Move_EMBER:: @ 81C7C79 loadspritegfx 10029 loopsewithpan SE_W052, 192, 5, 2 - createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1 + createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1 delay 4 - createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, 0, 24, 20, 1 + createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 24, 20, 1 delay 4 - createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, 16, 24, 20, 1 + createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, 16, 24, 20, 1 delay 16 playsewithpan SE_W172, 63 call gUnknown_81C7CD5 @@ -937,7 +937,7 @@ Move_EMBER:: @ 81C7C79 end gUnknown_81C7CD5:: @ 81C7CD5 - createsprite gUnknown_83E5D64, ANIM_TARGET, 2, -24, 24, 24, 24, 20, 1, 1 + createsprite gEmberFlareSpriteTemplate, ANIM_TARGET, 2, -24, 24, 24, 24, 20, 1, 1 delay 4 return @@ -949,7 +949,7 @@ Move_MEGA_PUNCH:: @ 81C7CED createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, 0 setalpha 12, 8 playsewithpan SE_W025, 63 - createsprite gUnknown_83E67C0, ANIM_ATTACKER, 3, 0, 0, 0, 50 + createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 50 createvisualtask sub_80BA7F8, 10, 4, 2, 0, 7, 32767 delay 50 call gUnknown_81C7D89 @@ -997,7 +997,7 @@ Move_MEGA_KICK:: @ 81C7DC7 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, 0 setalpha 12, 8 playsewithpan SE_W025, 63 - createsprite gUnknown_83E67C0, ANIM_ATTACKER, 3, 0, 0, 1, 50 + createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 50 createvisualtask sub_80BA7F8, 10, 4, 2, 0, 7, 32767 delay 50 playsewithpan SE_W025B, 63 @@ -1031,12 +1031,12 @@ gUnknown_81C7E77:: @ 81C7E77 gUnknown_81C7E91:: @ 81C7E91 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, -8, 1, 2 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0 goto gUnknown_81C7E77 gUnknown_81C7EB6:: @ 81C7EB6 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, 1, 2 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 goto gUnknown_81C7E77 Move_SONIC_BOOM:: @ 81C7EDB @@ -1172,24 +1172,24 @@ gUnknown_81C81E3:: @ 81C81E3 gUnknown_81C81E8:: @ 81C81E8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -20, -20, 1, 2 - createsprite gUnknown_83E6710, ANIM_TARGET, 3, -20, -12, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, -20, -12, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 playsewithpan SE_W233B, 63 delay 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 8, 0, 1, 2 - createsprite gUnknown_83E6710, ANIM_TARGET, 3, 8, 8, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 8, 8, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 playsewithpan SE_W233B, 63 goto gUnknown_81C81E3 gUnknown_81C8259:: @ 81C8259 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 12, -20, 1, 2 - createsprite gUnknown_83E6710, ANIM_TARGET, 3, 12, -12, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 12, -12, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 playsewithpan SE_W233B, 63 delay 8 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -12, 0, 1, 2 - createsprite gUnknown_83E6710, ANIM_TARGET, 3, -12, 8, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, -12, 8, 8, 1, 0 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 playsewithpan SE_W233B, 63 goto gUnknown_81C81E3 @@ -1283,7 +1283,7 @@ Move_REVERSAL:: @ 81C8445 delay 8 playsewithpan SE_W233B, 63 createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 32767, 8, 0, 0 - createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 10, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 10, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 createvisualtask sub_8099BD4, 5, 0, 1, 8, 1, 0 end @@ -1383,7 +1383,7 @@ Move_DIZZY_PUNCH:: @ 81C86FC monbg 1 setalpha 12, 8 call gUnknown_81C8817 - createsprite gUnknown_83E6710, ANIM_TARGET, 5, 16, 8, 20, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 5, 16, 8, 20, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 16, 0, 1, 1 playsewithpan SE_W004, 63 createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, 160, -32 @@ -1394,7 +1394,7 @@ Move_DIZZY_PUNCH:: @ 81C86FC createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, -384, -31 delay 10 call gUnknown_81C8817 - createsprite gUnknown_83E6710, ANIM_TARGET, 5, -16, -8, 20, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 5, -16, -8, 20, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -16, -16, 1, 1 playsewithpan SE_W233B, 63 createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, 160, -32 @@ -3196,7 +3196,7 @@ gUnknown_81CB11E:: @ 81CB11E playsewithpan SE_W026, 192 delay 6 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 - createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 playsewithpan SE_W004, 63 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 waitforvisualfinish @@ -3523,7 +3523,7 @@ Move_HEAT_WAVE:: @ 81CB766 loadspritegfx 10261 createvisualtask AnimTask_BlendParticle, 5, 10261, 0, 6, 6, 31 createvisualtask AnimTask_LoadSandstormBackground, 5, 1 - createvisualtask sub_80ADAA4, 6, 6, 31 + createvisualtask AnimTask_BlendBackground, 6, 6, 31 panse_1B SE_W257, 192, 63, 2, 0 delay 4 createvisualtask sub_80AD800, 5, @@ -3548,7 +3548,7 @@ Move_HAIL:: @ 81CB816 loadspritegfx 10141 createvisualtask sub_80BA7F8, 10, 1, 3, 0, 6, 0 waitforvisualfinish - createvisualtask sub_80B038C, 5, + createvisualtask AnimTask_Hail1, 5, loopsewithpan SE_W258, 0, 8, 10 waitforvisualfinish createvisualtask sub_80BA7F8, 10, 1, 3, 6, 0, 0 @@ -3776,20 +3776,20 @@ gUnknown_81CBC47:: @ 81CBC47 delay 4 delay 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, 1, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0 playsewithpan SE_W233, 63 delay 20 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, 1, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0 playsewithpan SE_W233, 63 delay 20 createvisualtask AnimTask_WindUpLunge, 2, 0, -24, 0, 24, 10, 24, 3 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, 0 delay 37 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0 playsewithpan SE_W233B, 63 waitforvisualfinish createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, 0 @@ -3805,20 +3805,20 @@ gUnknown_81CBD16:: @ 81CBD16 createsprite gUnknown_83E6808, ANIM_ATTACKER, 3, 1, 0, 0, 90, 10 delay 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, 1, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0 playsewithpan SE_W233, 63 delay 20 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 delay 5 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, 1, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0 playsewithpan SE_W233, 63 delay 20 createvisualtask AnimTask_WindUpLunge, 2, 0, -24, 0, 24, 10, 24, 3 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, 0 delay 37 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0 playsewithpan SE_W233B, 63 waitforvisualfinish createsprite gUnknown_83E6820, ANIM_ATTACKER, 2, 1, 0, -8, -12 @@ -4026,7 +4026,7 @@ Move_MIST_BALL:: @ 81CC212 createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 1, 1, 32279, 16, 32767, 16 delay 0 playsewithpan SE_W114, 0 - createvisualtask sub_80AFD80, 5, + createvisualtask AnimTask_LoadMistTiles, 5, createvisualtask sub_80BA7F8, 10, 4, 3, 0, 16, 32767 delay 8 createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 70, 0 @@ -4154,7 +4154,7 @@ Move_NEEDLE_ARM:: @ 81CC513 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 18, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 - createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 playsewithpan SE_W233B, 63 createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 0, -24, 10 createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 17, -17, 10 @@ -4379,7 +4379,7 @@ Move_SHADOW_PUNCH:: @ 81CCB76 playsewithpan SE_W026, 192 delay 6 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 - createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 playsewithpan SE_W004, 63 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 waitforvisualfinish @@ -4749,7 +4749,7 @@ Move_ICE_PUNCH:: @ 81CD2E0 createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 160 createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 224 delay 17 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 4, 0, -10, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, -10, 8, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, 1, 1 playsewithpan SE_W004, 63 delay 2 @@ -4914,7 +4914,7 @@ Move_THUNDER_PUNCH:: @ 81CD6CA createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, 0 waitforvisualfinish playsewithpan SE_W004, 63 - createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 delay 1 createvisualtask sub_80BA0E8, 2, 257, 257, 257 @@ -6661,19 +6661,19 @@ gUnknown_81CFEEB:: @ 81CFEEB end gUnknown_81CFEF0:: @ 81CFEF0 - createsprite gUnknown_83E6710, ANIM_TARGET, 4, -16, -8, 20, 1, 1 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, -16, -8, 20, 1, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -16, -16, 1, 2 createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1 goto gUnknown_81CFEEB gUnknown_81CFF26:: @ 81CFF26 - createsprite gUnknown_83E6710, ANIM_TARGET, 4, 8, 8, 20, 1, 1 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 8, 8, 20, 1, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, 0, 1, 2 createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1 goto gUnknown_81CFEEB gUnknown_81CFF5C:: @ 81CFF5C - createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 20, 1, 1 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 20, 1, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -8, 1, 1 createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 goto gUnknown_81CFEEB @@ -6687,7 +6687,7 @@ Move_DYNAMIC_PUNCH:: @ 81CFF92 monbg 3 setalpha 12, 8 playsewithpan SE_W233B, 63 - createsprite gUnknown_83E6710, ANIM_TARGET, 3, 0, 0, 20, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 20, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 createvisualtask AnimTask_ShakeMon, 5, 1, 5, 0, 7, 1 delay 1 @@ -6726,17 +6726,17 @@ Move_COUNTER:: @ 81D005A playsewithpan SE_W233B, 63 delay 1 createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 25, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, -15, 18, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, -15, 18, 8, 1, 0 delay 3 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -4, 1, 0 playsewithpan SE_W233B, 63 delay 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 0, -4, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 0, -4, 8, 1, 0 delay 3 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 15, 9, 1, 0 playsewithpan SE_W233B, 63 delay 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 15, 9, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 15, 9, 8, 1, 0 delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 waitforvisualfinish @@ -6775,7 +6775,7 @@ Move_ROCK_SMASH:: @ 81D01A4 setalpha 12, 8 delay 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 - createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 8, 1, 0 playsewithpan SE_W233B, 63 createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 5, 1 waitforvisualfinish @@ -7050,7 +7050,7 @@ gUnknown_81D086C:: @ 81D086C Move_HAZE:: @ 81D0882 waitforvisualfinish playsewithpan SE_W114, 0 - createvisualtask sub_80AFAE4, 5, + createvisualtask AnimTask_Haze1, 5, delay 30 createvisualtask sub_80BA7F8, 10, 1920, 2, 0, 16, 0 delay 90 @@ -7070,7 +7070,7 @@ Move_FIRE_PUNCH:: @ 81D08B5 createsprite gUnknown_83E5BE0, ANIM_TARGET, 1, 196 playsewithpan SE_W172, 63 waitforvisualfinish - createsprite gUnknown_83E6710, ANIM_TARGET, 3, 0, 0, 8, 1, 0 + createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1 createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 15, 1 call gUnknown_81D0950 @@ -9935,7 +9935,7 @@ Move_MAGICAL_LEAF:: @ 81D4E6D Move_ICE_BALL:: @ 81D4F8E loadspritegfx 10043 loadspritegfx 10141 - createvisualtask sub_80B0870, 5, 0 + createvisualtask AnimTask_GetRolloutCounter, 5, 0 jumpargeq 0, 4, gUnknown_81D5005 gUnknown_81D4FA5:: @ 81D4FA5 @@ -9943,7 +9943,7 @@ gUnknown_81D4FA5:: @ 81D4FA5 createsprite gUnknown_83E665C, ANIM_TARGET, 2, 15, 0, -12, -16, 30, -40 delay 28 playsewithpan SE_W280, 63 - createvisualtask sub_80B0870, 5, 0 + createvisualtask AnimTask_GetRolloutCounter, 5, 0 jumpargeq 0, 0, gUnknown_81D5016 jumpargeq 0, 1, gUnknown_81D5045 jumpargeq 0, 2, gUnknown_81D507E @@ -9951,7 +9951,7 @@ gUnknown_81D4FA5:: @ 81D4FA5 jumpargeq 0, 4, gUnknown_81D5109 gUnknown_81D4FF3:: @ 81D4FF3 - createvisualtask sub_80B0870, 5, 0 + createvisualtask AnimTask_GetRolloutCounter, 5, 0 jumpargeq 0, 4, gUnknown_81D500C gUnknown_81D5004:: @ 81D5004 @@ -10272,88 +10272,88 @@ gUnknown_81D5712:: @ 81D5712 return gUnknown_81D575B:: @ 81D575B - createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 10, 10, 0 + createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 10, 10, 0 playsewithpan SE_W092, 63 delay 6 - createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 20, -20, 0 + createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, -20, 0 playsewithpan SE_W092, 63 delay 6 - createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, -20, 15, 0 + createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, -20, 15, 0 playsewithpan SE_W092, 63 delay 6 - createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 0, 0, 0 + createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0 playsewithpan SE_W092, 63 delay 6 - createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, -20, -20, 0 + createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, -20, -20, 0 playsewithpan SE_W092, 63 delay 6 - createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 16, -8, 0 + createsprite gPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 16, -8, 0 playsewithpan SE_W092, 63 return gUnknown_81D57CC:: @ 81D57CC - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 10, 10, 0 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 0 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 20, -20, 0 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 20, -20, 0 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, 15, 0 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, 15, 0 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 0, 0, 0 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, -20, 0 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, -20, 0 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 16, -8, 0 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 16, -8, 0 playsewithpan SE_W145C, 63 return gUnknown_81D583D:: @ 81D583D - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 10, 10, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 1 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -28, -10, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -28, -10, 1 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 20, -20, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 20, -20, 1 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, 15, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, 15, 1 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 0, 0, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 27, 8, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 27, 8, 1 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, -20, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, -20, -20, 1 playsewithpan SE_W145C, 63 delay 6 - createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 16, -8, 1 + createsprite gWaterBubbleSpriteTemplate, ANIM_ATTACKER, 2, 16, -8, 1 playsewithpan SE_W145C, 63 return gUnknown_81D58D4:: @ 81D58D4 playsewithpan SE_W085B, 63 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, 5, 0, 5, 0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0 delay 2 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, -5, 10, 5, 1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1 delay 2 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, 15, 20, 5, 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2 delay 2 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, -15, -10, 5, 0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0 delay 2 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, 25, 0, 5, 1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1 delay 2 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, -8, 8, 5, 2 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2 delay 2 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, 2, -8, 5, 0 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0 delay 2 - createsprite gUnknown_83E6088, ANIM_TARGET, 2, -20, 15, 5, 1 + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1 return gUnknown_81D595F:: @ 81D595F diff --git a/data/data_8471F00.s b/data/data_8471F00.s index 82d507ea1..62a23c646 100644 --- a/data/data_8471F00.s +++ b/data/data_8471F00.s @@ -191,30 +191,6 @@ gUnknown_8478EC4:: @ 8478EC4 gUnknown_8478F14:: @ 8478F14 .incbin "baserom.gba", 0x478F14, 0x8 -gUnknown_8478F1C:: @ 8478F1C - .incbin "baserom.gba", 0x478F1C, 0x144 - -gUnknown_8479060:: @ 8479060 - .incbin "baserom.gba", 0x479060, 0x78 - -gUnknown_84790D8:: @ 84790D8 - .incbin "baserom.gba", 0x4790D8, 0xC0 - -gUnknown_8479198:: @ 8479198 - .incbin "baserom.gba", 0x479198, 0x10 - -gUnknown_84791A8:: @ 84791A8 - .incbin "baserom.gba", 0x4791A8, 0x10 - -gUnknown_84791B8:: @ 84791B8 - .incbin "baserom.gba", 0x4791B8, 0x14 - -gUnknown_84791CC:: @ 84791CC - .incbin "baserom.gba", 0x4791CC, 0x1C - -gUnknown_84791E8:: @ 84791E8 - .incbin "baserom.gba", 0x4791E8, 0x18 - .section .rodata.8479668 .align 2 diff --git a/data/field_weather.s b/data/field_weather.s index 517480d9a..03b3e8faa 100644 --- a/data/field_weather.s +++ b/data/field_weather.s @@ -25,7 +25,7 @@ gUnknown_83C2D00:: @ 83C2D00 gUnknown_83C2D20:: @ 83C2D20 .incbin "baserom.gba", 0x3C2D20, 0x820 -gUnknown_83C3540:: @ 83C3540 +gWeatherFog1Tiles:: @ 83C3540 .incbin "baserom.gba", 0x3C3540, 0x3080 gUnknown_83C65C0:: @ 83C65C0 diff --git a/data/graphics.s b/data/graphics.s index 7ead75c74..5eacc0cb2 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -13760,7 +13760,7 @@ gFile_graphics_battle_anims_sprites_277_sheet:: @ 8E7EE00 .incbin "graphics/battle_anims/sprites/277.4bpp.lz" .align 2 -gFile_graphics_battle_anims_backgrounds_fog_tilemap:: @ 8E7F1F4 +gBattleAnimFogTilemap:: @ 8E7F1F4 .incbin "graphics/battle_anims/backgrounds/fog.bin.lz" .align 2 diff --git a/include/battle.h b/include/battle.h index 122ccc894..00f7dcea9 100644 --- a/include/battle.h +++ b/include/battle.h @@ -664,7 +664,7 @@ extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200]; extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT]; extern void (*gPreBattleCallback1)(void); extern bool8 gDoingBattleAnim; -extern void *gUnknown_3005EE0[]; +extern u8 *gUnknown_3005EE0[MAX_BATTLERS_COUNT]; extern u8 *gUnknown_2022BB8; extern u8 *gUnknown_2022BBC; extern void (*gBattleMainFunc)(void); diff --git a/include/battle_anim.h b/include/battle_anim.h index 9db123f91..ad1a0fed8 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -57,46 +57,53 @@ extern s32 gAnimMoveDmg; extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; extern u8 gUnknown_2037F24; -extern struct OamData gOamData_83ACA40; -extern struct OamData gOamData_83AC9C8; -extern struct OamData gOamData_83ACA38; -extern struct OamData gOamData_83AC9D0; -extern struct OamData gOamData_83AC9F8; -extern struct OamData gOamData_83AC9D8; -extern struct OamData gOamData_83ACB58; -extern struct OamData gOamData_83ACAF8; -extern struct OamData gOamData_83ACB60; -extern struct OamData gOamData_83ACA30; -extern struct OamData gOamData_83ACA98; -extern struct OamData gOamData_83ACA90; -extern struct OamData gOamData_83ACAF0; -extern struct OamData gOamData_83ACB10; -extern struct OamData gOamData_83ACB18; -extern struct OamData gOamData_83ACB38; -extern struct OamData gOamData_83ACA18; -extern struct OamData gOamData_83ACB20; -extern struct OamData gOamData_83ACB50; -extern struct OamData gOamData_83ACAB8; -extern struct OamData gOamData_83ACA00; -extern struct OamData gOamData_83ACBC0; -extern struct OamData gOamData_83ACB00; -extern struct OamData gOamData_83AC9E0; -extern struct OamData gOamData_83ACA20; -extern struct OamData gOamData_83ACA80; -extern struct OamData gOamData_83ACAA0; - +extern const struct OamData gOamData_83AC9C8; +extern const struct OamData gOamData_83AC9D0; +extern const struct OamData gOamData_83AC9D8; +extern const struct OamData gOamData_83AC9E0; +extern const struct OamData gOamData_83AC9F8; +extern const struct OamData gOamData_83ACA00; +extern const struct OamData gOamData_83ACA18; +extern const struct OamData gOamData_83ACA20; +extern const struct OamData gOamData_83ACA30; +extern const struct OamData gOamData_83ACA38; +extern const struct OamData gOamData_83ACA40; +extern const struct OamData gOamData_83ACA80; +extern const struct OamData gOamData_83ACA90; +extern const struct OamData gOamData_83ACA98; +extern const struct OamData gOamData_83ACAA0; +extern const struct OamData gOamData_83ACAB8; +extern const struct OamData gOamData_83ACAC8; +extern const struct OamData gOamData_83ACAE8; +extern const struct OamData gOamData_83ACAF0; +extern const struct OamData gOamData_83ACAF8; +extern const struct OamData gOamData_83ACB00; +extern const struct OamData gOamData_83ACB10; +extern const struct OamData gOamData_83ACB18; +extern const struct OamData gOamData_83ACB20; +extern const struct OamData gOamData_83ACB28; +extern const struct OamData gOamData_83ACB38; +extern const struct OamData gOamData_83ACB48; +extern const struct OamData gOamData_83ACB50; +extern const struct OamData gOamData_83ACB58; +extern const struct OamData gOamData_83ACB60; +extern const struct OamData gOamData_83ACB88; +extern const struct OamData gOamData_83ACBC0; +extern const struct OamData gOamData_83ACBE8; + +// battle_anim.s +void MoveBattlerSpriteToBG(u8 battlerId, u8); +void sub_8073128(u8); void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim); void DestroyAnimSprite(struct Sprite *sprite); void DestroyAnimVisualTask(u8 taskId); void DestroyAnimSoundTask(u8 taskId); -bool8 IsAnimBankSpriteVisible(u8 bank); -void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible); +bool8 IsAnimBankSpriteVisible(u8 battlerId); bool8 IsContest(void); s8 BattleAnimAdjustPanning(s8 pan); s8 BattleAnimAdjustPanning2(s8 pan); -s16 sub_80A52EC(s16 a); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); bool8 IsBattlerSpriteVisible(u8 battlerId); s16 KeepPanInRange(s16 a, s32 oldPan); @@ -135,23 +142,6 @@ enum BATTLER_COORD_ATTR_RAW_BOTTOM, }; -u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId); - -bool8 IsBankSpritePresent(u8 battlerId); -void sub_80A6C68(u8 arg0); -u8 GetAnimBattlerSpriteId(u8 wantedBank); -bool8 IsDoubleBattle(void); -u8 sub_80A6D94(void); -u8 sub_80A8364(u8); -void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *)); -void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite); -u8 GetBattlerSpriteDefault_Y(u8 battlerId); -u8 sub_80A82E4(u8 battlerId); -u8 GetSubstituteSpriteDefault_Y(u8 battlerId); -u8 GetGhostSpriteDefault_Y(u8 battlerId); -void MoveBattlerSpriteToBG(u8 battlerId, u8); -void sub_8073128(u8); - // battle_anim_status_effects.s #define STAT_ANIM_PLUS1 15 #define STAT_ANIM_PLUS2 39 @@ -245,7 +235,7 @@ u8 sub_8075D80(u8 a1); void AnimSpriteOnMonPos(struct Sprite *sprite); void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); void AnimThrowProjectile(struct Sprite *sprite); -void sub_8075F0C(struct Sprite *sprite); +void AnimSnoreZ(struct Sprite *sprite); s16 CloneBattlerSpriteWithBlend(u8 animBattler); void obj_delete_but_dont_free_vram(struct Sprite *sprite); void sub_8076048(u8 taskId); @@ -293,6 +283,7 @@ void sub_8099BD4(u8 taskId); // normal.c extern const struct SpriteTemplate gUnknown_83E7C98; +extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate; u32 UnpackSelectedBattleAnimPalettes(s16 selector); void sub_80B9BDC(u8 taskId); @@ -353,12 +344,35 @@ void sub_80B194C(u8 taskId); void sub_80B1D3C(struct Sprite *sprite); void sub_80B2868(u8 taskId); -// water.s -extern const union AnimCmd *const gUnknown_83E5958[]; +// fighting.c +void sub_80B1530(u8 taskId); + +// ice.c +void AnimTask_Haze1(u8 taskId); +void AnimTask_LoadMistTiles(u8 taskId); +void AnimTask_Hail1(u8 taskId); +void AnimTask_GetRolloutCounter(u8 taskId); -// fire.s +// electric.c +void sub_80AE220(u8 taskId); +void sub_80AE540(u8 taskId); +void sub_80AE8A0(u8 taskId); +void sub_80AEA10(u8 taskId); +void sub_80AECE0(u8 taskId); +void sub_80AEFA0(u8 taskId); + +// fire.c extern const union AnimCmd *const gUnknown_83E5D48[]; +void sub_80ACEA4(u8 taskId); +void sub_80ADAD8(u8 taskId); +void AnimTask_BlendBackground(u8 taskId); +void sub_80AD800(u8 taskId); + +// water.s +extern const union AnimCmd *const gUnknown_83E5958[]; +extern const union AnimCmd *const gUnknown_83E5A78[]; + // battle_anim_utility_funcs.c void sub_80BA7F8(u8 taskId); void sub_80BA83C(u8 taskId); diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 96f57c78a..06a0e2957 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -203,7 +203,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringId); void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId); void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2); void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData); -void BtlController_EmitChooseItem(u8 bufferId, u8* arg1); +void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1); void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4); void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue); void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints); @@ -221,7 +221,7 @@ void BtlController_EmitPlayFanfare(u8 bufferId, u16 songId); void BtlController_EmitFaintingCry(u8 bufferId); void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId); void BtlController_EmitIntroTrainerBallThrow(u8 bufferId); -void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2); +void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus *hpAndStatus, u8 arg2); void BtlController_EmitHidePartyStatusSummary(u8 bufferId); void BtlController_EmitEndBounceEffect(u8 bufferId); void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible); @@ -246,21 +246,16 @@ void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); void MoveSelectionDestroyCursorAt(u8 cursorPos); void HandleInputChooseMove(void); -// recorded player controller -void SetControllerToRecordedPlayer(void); - // opponent controller void SetControllerToOpponent(void); void OpponentBufferExecCompleted(void); -// player partner controller -void SetControllerToPlayerPartner(void); - // safari controller void SetControllerToSafari(void); // pokedude controller -void SetControllerToPokeDude(void); +void SetControllerToPokedude(void); +void InitPokedudePartyAndOpponent(void); // oak and old man controller void SetControllerToOakOrOldMan(void); @@ -273,10 +268,10 @@ void sub_80E7988(void); void sub_80EB30C(void); void sub_80EB524(void); -// link opponent +// link opponent controller void SetControllerToLinkOpponent(void); -// link partner +// link partner controller void SetControllerToLinkPartner(void); #endif // GUARD_BATTLE_CONTROLLERS_H diff --git a/include/gba/macro.h b/include/gba/macro.h index 01bb85b7a..e416c3577 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -110,12 +110,12 @@ u32 _size = size; \ while (1) \ { \ - DmaFill##bit(dmaNum, 0, dest, (block)); \ - dest += (block); \ + DmaFill##bit(dmaNum, 0, dest, (block)); \ + dest += (block); \ _size -= (block); \ if (_size <= (block)) \ { \ - DmaFill##bit(dmaNum, 0, dest, _size); \ + DmaFill##bit(dmaNum, 0, dest, _size); \ break; \ } \ } \ @@ -123,16 +123,16 @@ #define DmaFillLarge(dmaNum, value, dest, size, block, bit) \ { \ - void *_dest = (void *)dest; \ + void *_dest = (void *)dest; \ u32 _size = size; \ while (1) \ { \ - DmaFill##bit(dmaNum, value, _dest, (block)); \ + DmaFill##bit(dmaNum, value, _dest, (block)); \ _dest += (block); \ _size -= (block); \ if (_size <= (block)) \ { \ - DmaFill##bit(dmaNum, value, _dest, _size); \ + DmaFill##bit(dmaNum, value, _dest, _size); \ break; \ } \ } \ @@ -162,7 +162,7 @@ #define DmaFillDefvars(dmaNum, value, dest, size, bit) \ { \ - void *_dest = (void *)dest; \ + void *_dest = (void *)dest; \ u32 _size = size; \ DmaFill##bit(dmaNum, value, _dest, _size); \ } diff --git a/include/graphics.h b/include/graphics.h index c057da386..354339235 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2915,7 +2915,6 @@ extern const u8 gBerryFixWindow_Tilemap[]; extern const u8 gBerryFixWindow_Pal[]; // item_pc - extern const u8 gItemPcTiles[]; extern const u32 gItemPcBgPals[]; extern const u8 gItemPcTilemap[]; @@ -3736,6 +3735,11 @@ extern const u32 gSubstituteDollGfx[]; extern const u32 gSubstituteDollTilemap[]; extern const u32 gSubstituteDollPal[]; +// ice +extern const u8 gWeatherFog1Tiles[]; +extern const u32 gBattleAnimFogTilemap[]; +extern const u16 gUnknown_83C2CE0[]; + // credits extern const u32 gCreditsPokeballBgGfxTiles[]; extern const u32 gCreditsPokeballBgGfxMap[]; diff --git a/include/party_menu.h b/include/party_menu.h index 6c81a248c..19cdda1dc 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -89,5 +89,6 @@ void CB2_PartyMenuFromStartMenu(void); void sub_8128198(void); void sub_8127FF4(u8 slot, u8 slot2); void LoadHeldItemIcons(void); +void sub_8127968(void); #endif // GUARD_PARTY_MENU_H diff --git a/include/quest_log_815A008.h b/include/quest_log_815A008.h new file mode 100644 index 000000000..2577450a4 --- /dev/null +++ b/include/quest_log_815A008.h @@ -0,0 +1,9 @@ +#ifndef GUARD_QUEST_LOG_815A008_H +#define GUARD_QUEST_LOG_815A008_H + +#include "global.h" + +void sub_815A008(struct QuestLog *); +void sub_815A1F8(struct QuestLog *, struct MapObjectTemplate *); + +#endif //GUARD_QUEST_LOG_815A008_H diff --git a/include/strings.h b/include/strings.h index 6ad76e2fa..377b6ea39 100644 --- a/include/strings.h +++ b/include/strings.h @@ -243,6 +243,28 @@ extern const u8 gUnknown_83FDDEB[]; extern const u8 gUnknown_83FDCD2[]; extern const u8 gUnknown_83FE6FA[]; +// battle_controller_pokedude +extern const u8 gUnknown_81C5F69[]; +extern const u8 gUnknown_81C5FA7[]; +extern const u8 gUnknown_81C5FDC[]; +extern const u8 gUnknown_81C601C[]; +extern const u8 gUnknown_81C60FA[]; +extern const u8 gUnknown_81C615A[]; +extern const u8 gUnknown_81C6196[]; +extern const u8 gUnknown_81C61EA[]; +extern const u8 gUnknown_81C6202[]; +extern const u8 gUnknown_81C6301[]; +extern const u8 gUnknown_81C63A9[]; +extern const u8 gUnknown_81C63F9[]; +extern const u8 gUnknown_81C6446[]; +extern const u8 gUnknown_81C657A[]; +extern const u8 gUnknown_81C6637[]; +extern const u8 gUnknown_81C6645[]; +extern const u8 gUnknown_81C66CF[]; +extern const u8 gUnknown_81C6787[]; +extern const u8 gUnknown_81C684B[]; +extern const u8 gUnknown_81C686C[]; + // credits extern const u8 gString_Dummy[]; extern const u8 gString_PokemonFireRed_Staff[]; // FR diff --git a/include/unk_8159F40.h b/include/unk_8159F40.h deleted file mode 100644 index 41db36aad..000000000 --- a/include/unk_8159F40.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef GUARD_UNK_8159F40_H -#define GUARD_UNK_8159F40_H - -#include "global.h" - -void InitPokedudePartyAndOpponent(void); -void sub_815A008(struct QuestLog *); -void sub_815A1F8(struct QuestLog *, struct MapObjectTemplate *); - -#endif //GUARD_UNK_8159F40_H diff --git a/ld_script.txt b/ld_script.txt index d84a70c7a..50a3b3270 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -157,11 +157,11 @@ SECTIONS { asm/battle_anim_effects_1.o(.text); asm/battle_anim_effects_2.o(.text); asm/water.o(.text); - asm/fire.o(.text); - asm/electric.o(.text); - asm/ice.o(.text); - asm/fighting.o(.text); - asm/poison.o(.text); + src/fire.o(.text); + src/electric.o(.text); + src/ice.o(.text); + src/fighting.o(.text); + src/poison.o(.text); src/flying.o(.text); src/psychic.o(.text); src/bug.o(.text); @@ -276,8 +276,8 @@ SECTIONS { src/text_window.o(.text); src/quest_log_8150454.o(.text); asm/dodrio_berry_picking.o(.text); - asm/battle_controller_pokedude.o(.text); - src/unk_8159F40.o(.text); + src/battle_controller_pokedude.o(.text); + src/quest_log_815A008.o(.text); src/dodrio_berry_picking_2.o(.text); asm/dodrio_berry_picking_2.o(.text); src/teachy_tv.o(.text); @@ -448,6 +448,11 @@ SECTIONS { src/pokemon_size_record.o(.rodata); src/item_use.o(.rodata); data/battle_anim_effects_misc.o(.rodata); + src/fire.o(.rodata); + src/electric.o(.rodata); + src/ice.o(.rodata); + src/fighting.o(.rodata); + src/poison.o(.rodata); src/flying.o(.rodata); src/psychic.o(.rodata); src/bug.o(.rodata); @@ -547,7 +552,7 @@ SECTIONS { src/text_window_graphics.o(.rodata); src/quest_log_8150454.o(.rodata); data/data_8471F00.o(.rodata); - src/unk_8159F40.o(.rodata); + src/battle_controller_pokedude.o(.rodata); src/teachy_tv.o(.rodata); src/unk_815C980.o(.rodata); data/data_8471F00.o(.rodata.8479668); diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 21d07246f..ffd66871c 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -888,7 +888,7 @@ void sub_8099BD4(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[10] = gBattleAnimArgs[3]; gTasks[taskId].data[11] = gBattleAnimArgs[4]; - gTasks[taskId].data[7] = GetAnimBattlerSpriteId(1); + gTasks[taskId].data[7] = GetAnimBattlerSpriteId(ANIM_TARGET); gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x; gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y; gTasks[taskId].data[0] = 0; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index c19af4cb7..a3bd26898 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1393,7 +1393,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) void AnimThrowProjectile(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, 1); - if (GetBattlerSide(gBattleAnimAttacker)) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; @@ -1409,7 +1409,7 @@ static void AnimThrowProjectile_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8075F0C(struct Sprite *sprite) +void AnimSnoreZ(struct Sprite *sprite) { bool8 r4; u8 battlerId, coordType; @@ -1434,7 +1434,7 @@ void sub_8075F0C(struct Sprite *sprite) InitSpritePosToAnimTarget(sprite, r4); battlerId = gBattleAnimTarget; } - if (GetBattlerSide(gBattleAnimAttacker)) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; InitSpritePosToAnimTarget(sprite, r4); sprite->data[0] = gBattleAnimArgs[4]; @@ -2070,7 +2070,7 @@ u8 sub_8076E34(s32 battlerId, u8 spriteId, s32 species) void sub_8076ED8(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); - if (GetBattlerSide(gBattleAnimAttacker)) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->pos1.x -= gBattleAnimArgs[0]; gBattleAnimArgs[3] = -gBattleAnimArgs[3]; @@ -2113,7 +2113,7 @@ void sub_8076F58(struct Sprite *sprite) void sub_8076FD0(struct Sprite *sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); - if (GetBattlerSide(gBattleAnimAttacker)) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->pos1.x -= gBattleAnimArgs[0]; else sprite->pos1.x += gBattleAnimArgs[0]; @@ -2210,7 +2210,7 @@ void sub_807729C(struct Sprite *sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - if (!GetBattlerSide(gBattleAnimAttacker)) + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) sprite->data[0] = 5; else sprite->data[0] = -10; @@ -2237,7 +2237,7 @@ void sub_8077350(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[2]; sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[4]; sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[5]; - if (!GetBattlerSide(gBattleAnimTarget)) + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) { x = (u16)gBattleAnimArgs[4] + 30; sprite->pos1.x += x; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 14c5ef6c8..d9a6754c7 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -309,7 +309,7 @@ void sub_80BACEC(u8 taskId) species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); else species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - spriteId = GetAnimBattlerSpriteId(0); + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species); sub_80752A0(&animBgData); AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap); @@ -354,7 +354,7 @@ static void sub_80BAF38(u8 taskId) SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); - sprite = &gSprites[GetAnimBattlerSpriteId(0)]; // unused + sprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)]; // unused sprite = &gSprites[gTasks[taskId].data[0]]; DestroySprite(sprite); sub_80752A0(&animBgData); diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index 99391ab3e..a6730cbbb 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -181,7 +181,7 @@ static void OakOldManBufferRunCommand(void) { if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) { - if (gBattleBufferA[gActiveBattler][0] < ARRAY_COUNT(sOakOldManBufferCommands)) + if (gBattleBufferA[gActiveBattler][0] < NELEMS(sOakOldManBufferCommands)) sOakOldManBufferCommands[gBattleBufferA[gActiveBattler][0]](); else OakOldManBufferExecCompleted(); @@ -463,7 +463,7 @@ static void sub_80E7CD8(void) static void Task_GiveExpToMon(u8 taskId) { - u32 monId = (u8)(gTasks[taskId].tExpTask_monId); + u32 monId = (u8)gTasks[taskId].tExpTask_monId; u8 battlerId = gTasks[taskId].tExpTask_battler; s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; @@ -487,7 +487,7 @@ static void Task_GiveExpToMon(u8 taskId) BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); gActiveBattler = savedActiveBattler; if (IsDoubleBattle() == TRUE - && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) + && ((u16)monId == gBattlerPartyIndexes[battlerId] || (u16)monId == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) gTasks[taskId].func = Task_LaunchLvlUpAnim; else gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a9173f1a9..3cb6d1432 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1497,7 +1497,7 @@ static void OpponentHandleStatusIconUpdate(void) UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = FALSE; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index f8d5958ba..16bf1ec87 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1003,7 +1003,6 @@ static void CompleteOnHealthbarDone(void) s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - if (hpValue != -1) { UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); @@ -2544,7 +2543,7 @@ static void PlayerHandleStatusIconUpdate(void) UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); battlerId = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = FALSE; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c new file mode 100644 index 000000000..57a405f3c --- /dev/null +++ b/src/battle_controller_pokedude.c @@ -0,0 +1,2739 @@ +#include "global.h" +#include "task.h" +#include "pokemon.h" +#include "party_menu.h" +#include "pokeball.h" +#include "bg.h" +#include "data.h" +#include "palette.h" +#include "util.h" +#include "m4a.h" +#include "link.h" +#include "sound.h" +#include "event_data.h" +#include "item.h" +#include "item_menu.h" +#include "text.h" +#include "strings.h" +#include "string_util.h" +#include "window.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "battle_message.h" +#include "reshow_battle_screen.h" +#include "constants/songs.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/pokemon.h" +#include "constants/trainers.h" + +struct Unk_84790E8 +{ + u8 unk_0; + u8 unk_1; + u16 unk_2; + void (*unk_4)(void); +}; + +struct PokedudeBattlePartyInfo +{ + u8 side; + u8 level; + u16 species; + u16 moves[4]; + u8 nature; + u8 gender; +}; + +static void PokedudeHandleGetMonData(void); +static void PokedudeHandleGetRawMonData(void); +static void PokedudeHandleSetMonData(void); +static void PokedudeHandleSetRawMonData(void); +static void PokedudeHandleLoadMonSprite(void); +static void PokedudeHandleSwitchInAnim(void); +static void PokedudeHandleReturnMonToBall(void); +static void PokedudeHandleDrawTrainerPic(void); +static void PokedudeHandleTrainerSlide(void); +static void PokedudeHandleTrainerSlideBack(void); +static void PokedudeHandleFaintAnimation(void); +static void PokedudeHandlePaletteFade(void); +static void PokedudeHandleSuccessBallThrowAnim(void); +static void PokedudeHandleBallThrowAnim(void); +static void PokedudeHandlePause(void); +static void PokedudeHandleMoveAnimation(void); +static void PokedudeHandlePrintString(void); +static void PokedudeHandlePrintSelectionString(void); +static void PokedudeHandleChooseAction(void); +static void PokedudeHandleUnknownYesNoBox(void); +static void PokedudeHandleChooseMove(void); +static void PokedudeHandleChooseItem(void); +static void PokedudeHandleChoosePokemon(void); +static void PokedudeHandleCmd23(void); +static void PokedudeHandleHealthBarUpdate(void); +static void PokedudeHandleExpUpdate(void); +static void PokedudeHandleStatusIconUpdate(void); +static void PokedudeHandleStatusAnimation(void); +static void PokedudeHandleStatusXor(void); +static void PokedudeHandleDataTransfer(void); +static void PokedudeHandleDMA3Transfer(void); +static void PokedudeHandlePlayBGM(void); +static void PokedudeHandleCmd32(void); +static void PokedudeHandleTwoReturnValues(void); +static void PokedudeHandleChosenMonReturnValue(void); +static void PokedudeHandleOneReturnValue(void); +static void PokedudeHandleOneReturnValue_Duplicate(void); +static void PokedudeHandleCmd37(void); +static void PokedudeHandleCmd38(void); +static void PokedudeHandleCmd39(void); +static void PokedudeHandleCmd40(void); +static void PokedudeHandleHitAnimation(void); +static void PokedudeHandleCmd42(void); +static void PokedudeHandlePlaySE(void); +static void PokedudeHandlePlayFanfare(void); +static void PokedudeHandleFaintingCry(void); +static void PokedudeHandleIntroSlide(void); +static void PokedudeHandleIntroTrainerBallThrow(void); +static void PokedudeHandleDrawPartyStatusSummary(void); +static void PokedudeHandleHidePartyStatusSummary(void); +static void PokedudeHandleEndBounceEffect(void); +static void PokedudeHandleSpriteInvisibility(void); +static void PokedudeHandleBattleAnimation(void); +static void PokedudeHandleLinkStandbyMsg(void); +static void PokedudeHandleResetActionMoveSelection(void); +static void PokedudeHandleCmd55(void); +static void PokedudeCmdEnd(void); + +static void sub_8159BA8(void); +static void sub_8159D04(void); +static void PokedudeBufferExecCompleted(void); +static void sub_8159824(void); +static void PokedudeBufferRunCommand(void); +static bool8 sub_8159AB8(void); +static void sub_8159998(void); +static void WaitForMonSelection(void); +static void CompleteWhenChoseItem(void); +static void sub_81567B0(void); +static void Task_LaunchLvlUpAnim(u8 taskId); +static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); +static void CompleteOnInactiveTextPrinter2(void); +static void Task_PrepareToGiveExpWithExpBar(u8 taskId); +static void sub_8156B24(u8 taskId); +static void Task_UpdateLvlInHealthbox(u8 taskId); +static u32 CopyPokedudeMonData(u8 monId, u8 *dst); +static void SetPokedudeMonData(u8 monId); +static void sub_8159478(u8 battlerId); +static void PokedudeDoMoveAnimation(void); +static void sub_81595EC(u8 taskId); +static const u8 *sub_8159EF0(void); + +u8 *gUnknown_3005EE0[MAX_BATTLERS_COUNT]; + +static void (*const sPokedudeBufferCommands[CONTROLLER_CMDS_COUNT])(void) = +{ + PokedudeHandleGetMonData, + PokedudeHandleGetRawMonData, + PokedudeHandleSetMonData, + PokedudeHandleSetRawMonData, + PokedudeHandleLoadMonSprite, + PokedudeHandleSwitchInAnim, + PokedudeHandleReturnMonToBall, + PokedudeHandleDrawTrainerPic, + PokedudeHandleTrainerSlide, + PokedudeHandleTrainerSlideBack, + PokedudeHandleFaintAnimation, + PokedudeHandlePaletteFade, + PokedudeHandleSuccessBallThrowAnim, + PokedudeHandleBallThrowAnim, + PokedudeHandlePause, + PokedudeHandleMoveAnimation, + PokedudeHandlePrintString, + PokedudeHandlePrintSelectionString, + PokedudeHandleChooseAction, + PokedudeHandleUnknownYesNoBox, + PokedudeHandleChooseMove, + PokedudeHandleChooseItem, + PokedudeHandleChoosePokemon, + PokedudeHandleCmd23, + PokedudeHandleHealthBarUpdate, + PokedudeHandleExpUpdate, + PokedudeHandleStatusIconUpdate, + PokedudeHandleStatusAnimation, + PokedudeHandleStatusXor, + PokedudeHandleDataTransfer, + PokedudeHandleDMA3Transfer, + PokedudeHandlePlayBGM, + PokedudeHandleCmd32, + PokedudeHandleTwoReturnValues, + PokedudeHandleChosenMonReturnValue, + PokedudeHandleOneReturnValue, + PokedudeHandleOneReturnValue_Duplicate, + PokedudeHandleCmd37, + PokedudeHandleCmd38, + PokedudeHandleCmd39, + PokedudeHandleCmd40, + PokedudeHandleHitAnimation, + PokedudeHandleCmd42, + PokedudeHandlePlaySE, + PokedudeHandlePlayFanfare, + PokedudeHandleFaintingCry, + PokedudeHandleIntroSlide, + PokedudeHandleIntroTrainerBallThrow, + PokedudeHandleDrawPartyStatusSummary, + PokedudeHandleHidePartyStatusSummary, + PokedudeHandleEndBounceEffect, + PokedudeHandleSpriteInvisibility, + PokedudeHandleBattleAnimation, + PokedudeHandleLinkStandbyMsg, + PokedudeHandleResetActionMoveSelection, + PokedudeHandleCmd55, + PokedudeCmdEnd, +}; + +// not used +static const u8 gUnknown_8479000[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 }; + +static const u8 gUnknown_8479008[][8] = +{ + { 0, 0, 0, 0, 64, 0, 0, 0 }, + { 4, 4, 0, 0, 0, 0, 0, 0 }, +}; + +static const u8 gUnknown_8479018[][8] = +{ + { 0, 0, 0, 0, 64, 0, 0, 0 }, + { 1, 0, 0, 0, 64, 0, 0, 0 }, + { 0, 0, 0, 0, 64, 0, 0, 0 }, +}; + +static const u8 gUnknown_8479030[][8] = +{ + { 0, 0, 0, 0, 64, 0, 0, 0 }, + { 2, 0, 0, 0, 64, 0, 0, 0 }, + { 0, 0, 0, 0, 64, 0, 0, 0 }, +}; + +static const u8 gUnknown_8479048[][8] = +{ + { 0, 0, 0, 0, 64, 0, 0, 0 }, + { 0, 0, 0, 0, 64, 0, 0, 0 }, + { 1, 0, 0, 0, 64, 0, 0, 0 }, +}; + +static const u8 (*const gUnknown_8479060[])[8] = +{ + gUnknown_8479008, + gUnknown_8479018, + gUnknown_8479030, + gUnknown_8479048, +}; + +static const u8 gUnknown_8479070[][8] = +{ + { 2, 2, 0, 0, 64, 0, 0, 0 }, + { 255, 255, 0, 0, 0, 0, 0, 0 }, +}; + +static const u8 gUnknown_8479080[][8] = +{ + { 2, 2, 0, 0, 64, 0, 0, 0 }, + { 2, 0, 0, 0, 64, 0, 0, 0 }, + { 2, 0, 0, 0, 64, 0, 0, 0 }, + { 255, 255, 0, 0, 0, 0, 0, 0 }, +}; + +static const u8 gUnknown_84790A0[][8] = +{ + { 2, 0, 0, 0, 64, 0, 0, 0 }, + { 0, 0, 0, 0, 64, 0, 0, 0 }, + { 0, 0, 0, 0, 64, 0, 0, 0 }, + { 255, 255, 0, 0, 0, 0, 0, 0 }, +}; + +static const u8 gUnknown_84790C0[][8] = +{ + { 0, 2, 0, 0, 64, 0, 0, 0 }, + { 2, 2, 0, 0, 64, 0, 0, 0 }, + { 255, 255, 0, 0, 0, 0, 0, 0 }, +}; + +static const u8 (*const gUnknown_84790D8[])[8] = +{ + gUnknown_8479070, + gUnknown_8479080, + gUnknown_84790A0, + gUnknown_84790C0, +}; + +static const struct Unk_84790E8 gUnknown_84790E8[] = +{ + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 16, + .unk_1 = 1, + .unk_2 = 4, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 16, + .unk_1 = 0, + .unk_2 = 13, + .unk_4 = sub_8159BA8, + }, +}; + +static const struct Unk_84790E8 gUnknown_8479108[] = +{ + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = NULL, + }, + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159D04, + }, + { + .unk_0 = 21, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 16, + .unk_1 = 1, + .unk_2 = 4, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 16, + .unk_1 = 0, + .unk_2 = 13, + .unk_4 = sub_8159BA8, + }, +}; + +static const struct Unk_84790E8 gUnknown_8479130[] = +{ + { + .unk_0 = 16, + .unk_1 = 1, + .unk_2 = 4, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 22, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 16, + .unk_1 = 1, + .unk_2 = 4, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 20, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 16, + .unk_1 = 0, + .unk_2 = 13, + .unk_4 = sub_8159BA8, + }, +}; + +static const struct Unk_84790E8 gUnknown_8479168[] = +{ + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = NULL, + }, + { + .unk_0 = 18, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 16, + .unk_1 = 1, + .unk_2 = 107, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 21, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, + { + .unk_0 = 55, + .unk_1 = 0, + .unk_2 = 0, + .unk_4 = sub_8159BA8, + }, +}; + +static const struct Unk_84790E8 *const gUnknown_8479198[] = +{ + gUnknown_84790E8, + gUnknown_8479108, + gUnknown_8479130, + gUnknown_8479168, +}; + +static const u8 *const gUnknown_84791A8[] = +{ + gUnknown_81C5F69, + gUnknown_81C5FA7, + gUnknown_81C5FDC, + gUnknown_81C601C, +}; + +static const u8 *const gUnknown_84791B8[] = +{ + gUnknown_81C60FA, + gUnknown_81C60FA, + gUnknown_81C615A, + gUnknown_81C6196, + gUnknown_81C61EA, +}; + +static const u8 *const gUnknown_84791CC[] = +{ + gUnknown_81C6202, + gUnknown_81C6301, + gUnknown_81C63A9, + gUnknown_81C63F9, + gUnknown_81C6446, + gUnknown_81C657A, + gUnknown_81C6637, +}; + +static const u8 *const gUnknown_84791E8[] = +{ + gUnknown_81C6645, + gUnknown_81C6645, + gUnknown_81C66CF, + gUnknown_81C6787, + gUnknown_81C684B, + gUnknown_81C686C, +}; + +static const struct PokedudeBattlePartyInfo sParties_Battle[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_RATTATA, + .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK }, + .nature = NATURE_LONELY, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 18, + .species = SPECIES_PIDGEY, + .moves = { MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK }, + .nature = NATURE_NAUGHTY, + .gender = MALE, + }, + {0xFF} +}; + +static const struct PokedudeBattlePartyInfo sParties_Status[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_RATTATA, + .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK }, + .nature = NATURE_LONELY, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 14, + .species = SPECIES_ODDISH, + .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER }, + .nature = NATURE_RASH, + .gender = MALE, + }, + {0xFF} +}; + +static const struct PokedudeBattlePartyInfo sParties_Matchups[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_POLIWAG, + .moves = { MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE }, + .nature = NATURE_RASH, + .gender = MALE, + }, + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_BUTTERFREE, + .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER }, + .nature = NATURE_RASH, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 14, + .species = SPECIES_ODDISH, + .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER }, + .nature = NATURE_RASH, + .gender = MALE, + }, + {0xFF} +}; + +static const struct PokedudeBattlePartyInfo sParties_Catching[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_BUTTERFREE, + .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE }, + .nature = NATURE_RASH, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 11, + .species = SPECIES_JIGGLYPUFF, + .moves = { MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND }, + .nature = NATURE_CAREFUL, + .gender = MALE, + }, + {0xFF} +}; + + +static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] = +{ + sParties_Battle, + sParties_Status, + sParties_Matchups, + sParties_Catching, +}; + +static void nullsub_99(void) +{ +} + +void SetControllerToPokedude(void) +{ + gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand; + *(&gBattleStruct->field_96) = gSpecialVar_0x8004; + gBattleStruct->field_97 = 0; +} + +static void PokedudeBufferRunCommand(void) +{ + if (gBattleControllerExecFlags & gBitTable[gActiveBattler]) + { + if (gBattleBufferA[gActiveBattler][0] < NELEMS(sPokedudeBufferCommands)) + { + if (!sub_8159AB8()) + sPokedudeBufferCommands[gBattleBufferA[gActiveBattler][0]](); + } + else + { + PokedudeBufferExecCompleted(); + } + } +} + +static void sub_8156140(void) +{ + sub_8159824(); +} + +static void CompleteOnBattlerSpriteCallbackDummy(void) +{ + if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + PokedudeBufferExecCompleted(); +} + +static void sub_8156184(void) +{ + if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE + && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) + { + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) + { + sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + } + else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + PokedudeBufferExecCompleted(); + } + } +} + +static void CompleteOnInactiveTextPrinter(void) +{ + if (!IsTextPrinterActive(0)) + PokedudeBufferExecCompleted(); +} + +static void sub_8156254(void) +{ + if (!gPaletteFade.active) + { + gMain.inBattle = FALSE; + gMain.callback1 = gPreBattleCallback1; + SetMainCallback2(gMain.savedCallback); + } +} + +static void sub_8156294(void) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + { + CreateTask(c3_0802FDF4, 10); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + PokedudeBufferExecCompleted(); + } +} + +static void sub_81562F0(void) +{ + if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); + gBattlerControllerFuncs[gActiveBattler] = sub_8156294; + } +} + +static void sub_81563A8(void) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy + && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)) + { + DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], + &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], + HEALTHBOX_ALL); + sub_804BD94(gActiveBattler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + CopyBattleSpriteInvisibility(gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = sub_81562F0; + } +} + +static void CompleteOnSpecialAnimDone(void) +{ + if (!gDoingBattleAnim) + PokedudeBufferExecCompleted(); +} + +static void sub_815649C(void) +{ + if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 255) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + PokedudeBufferExecCompleted(); + } +} + +static void sub_81564E4(void) +{ + sub_8159998(); +} + +static void OpenPartyMenuToChooseMon(void) +{ + if (!gPaletteFade.active) + { + gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; + DestroyTask(gUnknown_3004FFC[gActiveBattler]); + FreeAllWindowBuffers(); + sub_8127968(); + } +} + +static void WaitForMonSelection(void) +{ + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) + { + if (gUnknown_203B0C0 == 1) + BtlController_EmitChosenMonReturnValue(1, gUnknown_203B0C1, gUnknown_203B0DC); + else + BtlController_EmitChosenMonReturnValue(1, 6, NULL); + PokedudeBufferExecCompleted(); + } +} + +static void OpenBagAndChooseItem(void) +{ + u8 callbackId; + + if (!gPaletteFade.active) + { + gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; + nullsub_44(); + FreeAllWindowBuffers(); + switch (gSpecialVar_0x8004) + { + case 1: + default: + callbackId = 7; + break; + case 3: + callbackId = 8; + break; + } + sub_810B108(callbackId); + } +} + +static void CompleteWhenChoseItem(void) +{ + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) + { + BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId); + PokedudeBufferExecCompleted(); + } +} + +static void sub_8156624(void) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) + sub_80F1720(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) + { + if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) + { + DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], + &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], + HEALTHBOX_ALL); + sub_804BD94(gActiveBattler ^ BIT_FLANK); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); + } + DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], + &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], + HEALTHBOX_ALL); + sub_804BD94(gActiveBattler); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + gBattleSpritesDataPtr->animationData->field_9_x1 = 0; + gBattlerControllerFuncs[gActiveBattler] = sub_81567B0; + } +} + +static void sub_81567B0(void) +{ + bool32 r4 = FALSE; + + if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + r4 = TRUE; + if (r4 + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; + FreeSpriteTilesByTag(0x27F9); + FreeSpritePaletteByTag(0x27F9); + CreateTask(c3_0802FDF4, 10); + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = sub_815649C; + } +} + +#define tExpTask_monId data[0] +#define tExpTask_gainedExp data[1] +#define tExpTask_battler data[2] +#define tExpTask_frames data[10] + +static void Task_GiveExpToMon(u8 taskId) +{ + u32 monId = (u8)gTasks[taskId].tExpTask_monId; + u8 battlerId = gTasks[taskId].tExpTask_battler; + s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; + + if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar. + { + struct Pokemon *mon = &gPlayerParty[monId]; + u16 species = GetMonData(mon, MON_DATA_SPECIES); + u8 level = GetMonData(mon, MON_DATA_LEVEL); + u32 currExp = GetMonData(mon, MON_DATA_EXP); + u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + + if (currExp + gainedExp >= nextLvlExp) + { + u8 savedActiveBattler; + + SetMonData(mon, MON_DATA_EXP, &nextLvlExp); + CalculateMonStats(mon); + gainedExp -= nextLvlExp - currExp; + savedActiveBattler = gActiveBattler; + gActiveBattler = battlerId; + BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); + gActiveBattler = savedActiveBattler; + if (IsDoubleBattle() == TRUE + && ((u16)monId == gBattlerPartyIndexes[battlerId] || (u16)monId == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) + gTasks[taskId].func = Task_LaunchLvlUpAnim; + else + gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; + } + else + { + currExp += gainedExp; + SetMonData(mon, MON_DATA_EXP, &currExp); + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter2; + DestroyTask(taskId); + } + } + else + { + gTasks[taskId].func = Task_PrepareToGiveExpWithExpBar; + } +} + +static void Task_PrepareToGiveExpWithExpBar(u8 taskId) +{ + u8 monIndex = gTasks[taskId].tExpTask_monId; + s32 gainedExp = gTasks[taskId].tExpTask_gainedExp; + u8 battlerId = gTasks[taskId].tExpTask_battler; + struct Pokemon *mon = &gPlayerParty[monIndex]; + u8 level = GetMonData(mon, MON_DATA_LEVEL); + u16 species = GetMonData(mon, MON_DATA_SPECIES); + u32 exp = GetMonData(mon, MON_DATA_EXP); + u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level]; + u32 expToNextLvl; + + exp -= currLvlExp; + expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; + SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); + PlaySE(SE_EXP); + gTasks[taskId].func = sub_8156B24; +} + +static void sub_8156B24(u8 taskId) +{ + if (gTasks[taskId].tExpTask_frames < 13) + { + ++gTasks[taskId].tExpTask_frames; + } + else + { + u8 monId = gTasks[taskId].tExpTask_monId; + s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; + u8 battlerId = gTasks[taskId].tExpTask_battler; + s16 newExpPoints; + + newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); + if (newExpPoints == -1) // The bar has been filled with given exp points. + { + u8 level; + s32 currExp; + u16 species; + s32 expOnNextLvl; + + m4aSongNumStop(SE_EXP); + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + currExp = GetMonData(&gPlayerParty[monId], MON_DATA_EXP); + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); + expOnNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1]; + if (currExp + gainedExp >= expOnNextLvl) + { + u8 savedActiveBattler; + + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl); + CalculateMonStats(&gPlayerParty[monId]); + gainedExp -= expOnNextLvl - currExp; + savedActiveBattler = gActiveBattler; + gActiveBattler = battlerId; + BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); + gActiveBattler = savedActiveBattler; + gTasks[taskId].func = Task_LaunchLvlUpAnim; + } + else + { + currExp += gainedExp; + SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp); + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter2; + DestroyTask(taskId); + } + } + } +} + +static void Task_LaunchLvlUpAnim(u8 taskId) +{ + u8 battlerId = gTasks[taskId].tExpTask_battler; + u8 monIndex = gTasks[taskId].tExpTask_monId; + + if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) + battlerId ^= BIT_FLANK; + InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP); + gTasks[taskId].func = Task_UpdateLvlInHealthbox; +} + +static void Task_UpdateLvlInHealthbox(u8 taskId) +{ + u8 battlerId = gTasks[taskId].tExpTask_battler; + + if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive) + { + u8 monIndex = gTasks[taskId].tExpTask_monId; + + GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. + if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); + else + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL); + gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; + } +} + +static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) +{ + u8 monIndex = gTasks[taskId].tExpTask_monId; + u8 battlerId; + + GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value + battlerId = gTasks[taskId].tExpTask_battler; + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter2; + DestroyTask(taskId); +} + +static void sub_8156DCC(void) +{ + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT) + { + FreeOamMatrix(gSprites[gBattlerSpriteIds[gActiveBattler]].oam.matrixNum); + DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); + PokedudeBufferExecCompleted(); + } + } + else + { + if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse) + { + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); + PokedudeBufferExecCompleted(); + } + } +} + +static void CompleteOnHealthbarDone(void) +{ + s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0); + + SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); + if (hpValue != -1) + { + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], hpValue, HP_CURRENT); + } + else + { + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + PokedudeBufferExecCompleted(); + } +} + +static void CompleteOnInactiveTextPrinter2(void) +{ + if (!IsTextPrinterActive(0)) + PokedudeBufferExecCompleted(); +} + +static void DoHitAnimBlinkSpriteEffect(void) +{ + u8 spriteId = gBattlerSpriteIds[gActiveBattler]; + + if (gSprites[spriteId].data[1] == 32) + { + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].invisible = FALSE; + gDoingBattleAnim = FALSE; + PokedudeBufferExecCompleted(); + } + else + { + if ((gSprites[spriteId].data[1] % 4) == 0) + gSprites[spriteId].invisible ^= 1; + ++gSprites[spriteId].data[1]; + } +} + +static void sub_8156F7C(void) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + { + FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); + DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); + PokedudeBufferExecCompleted(); + } +} + +static void CompleteOnBattlerSpriteCallbackDummy2(void) +{ + if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) + PokedudeBufferExecCompleted(); +} + +static void CompleteOnFinishedBattleAnimation(void) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animFromTableActive) + PokedudeBufferExecCompleted(); +} + +static void CompleteOnFinishedStatusAnimation(void) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) + PokedudeBufferExecCompleted(); +} + +static void PokedudeBufferExecCompleted(void) +{ + gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + u8 playerId = GetMultiplayerId(); + + PrepareBufferDataTransferLink(2, 4, &playerId); + gBattleBufferA[gActiveBattler][0] = CONTROLLER_TERMINATOR_NOP; + } + else + { + gBattleControllerExecFlags &= ~gBitTable[gActiveBattler]; + } +} + +// not used +static void CompleteOnFinishedStatusAnimation2(void) +{ + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].statusAnimActive) + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleGetMonData(void) +{ + u8 monData[sizeof(struct Pokemon) * 2 + 56]; // this allows to get full data of two pokemon, trying to get more will result in overwriting data + u32 size = 0; + u8 monToCheck; + s32 i; + + if (gBattleBufferA[gActiveBattler][2] == 0) + { + size += CopyPokedudeMonData(gBattlerPartyIndexes[gActiveBattler], monData); + } + else + { + monToCheck = gBattleBufferA[gActiveBattler][2]; + for (i = 0; i < PARTY_SIZE; ++i) + { + if (monToCheck & 1) + size += CopyPokedudeMonData(i, monData + size); + monToCheck >>= 1; + } + } + BtlController_EmitDataTransfer(1, size, monData); + PokedudeBufferExecCompleted(); +} + +static u32 CopyPokedudeMonData(u8 monId, u8 *dst) +{ + struct BattlePokemon battleMon; + struct MovePpInfo moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + struct Pokemon *mon; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + mon = &gPlayerParty[monId]; + else + mon = &gEnemyParty[monId]; + switch (gBattleBufferA[gActiveBattler][1]) + { + case REQUEST_ALL_BATTLE: + battleMon.species = GetMonData(mon, MON_DATA_SPECIES); + battleMon.item = GetMonData(mon, MON_DATA_HELD_ITEM); + for (size = 0; size < MAX_MON_MOVES; ++size) + { + battleMon.moves[size] = GetMonData(mon, MON_DATA_MOVE1 + size); + battleMon.pp[size] = GetMonData(mon, MON_DATA_PP1 + size); + } + battleMon.ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + battleMon.friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); + battleMon.experience = GetMonData(mon, MON_DATA_EXP); + battleMon.hpIV = GetMonData(mon, MON_DATA_HP_IV); + battleMon.attackIV = GetMonData(mon, MON_DATA_ATK_IV); + battleMon.defenseIV = GetMonData(mon, MON_DATA_DEF_IV); + battleMon.speedIV = GetMonData(mon, MON_DATA_SPEED_IV); + battleMon.spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV); + battleMon.spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV); + battleMon.personality = GetMonData(mon, MON_DATA_PERSONALITY); + battleMon.status1 = GetMonData(mon, MON_DATA_STATUS); + battleMon.level = GetMonData(mon, MON_DATA_LEVEL); + battleMon.hp = GetMonData(mon, MON_DATA_HP); + battleMon.maxHP = GetMonData(mon, MON_DATA_MAX_HP); + battleMon.attack = GetMonData(mon, MON_DATA_ATK); + battleMon.defense = GetMonData(mon, MON_DATA_DEF); + battleMon.speed = GetMonData(mon, MON_DATA_SPEED); + battleMon.spAttack = GetMonData(mon, MON_DATA_SPATK); + battleMon.spDefense = GetMonData(mon, MON_DATA_SPDEF); + battleMon.isEgg = GetMonData(mon, MON_DATA_IS_EGG); + battleMon.abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM); + battleMon.otId = GetMonData(mon, MON_DATA_OT_ID); + GetMonData(mon, MON_DATA_NICKNAME, nickname); + StringCopy10(battleMon.nickname, nickname); + GetMonData(mon, MON_DATA_OT_NAME, battleMon.otName); + src = (u8 *)&battleMon; + for (size = 0; size < sizeof(battleMon); ++size) + dst[size] = src[size]; + break; + case REQUEST_SPECIES_BATTLE: + data16 = GetMonData(mon, MON_DATA_SPECIES); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_HELDITEM_BATTLE: + data16 = GetMonData(mon, MON_DATA_HELD_ITEM); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_MOVES_PP_BATTLE: + for (size = 0; size < MAX_MON_MOVES; ++size) + { + moveData.moves[size] = GetMonData(mon, MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(mon, MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); + src = (u8 *)(&moveData); + for (size = 0; size < sizeof(moveData); ++size) + dst[size] = src[size]; + break; + case REQUEST_MOVE1_BATTLE: + case REQUEST_MOVE2_BATTLE: + case REQUEST_MOVE3_BATTLE: + case REQUEST_MOVE4_BATTLE: + data16 = GetMonData(mon, MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_PP_DATA_BATTLE: + for (size = 0; size < MAX_MON_MOVES; ++size) + dst[size] = GetMonData(mon, MON_DATA_PP1 + size); + dst[size] = GetMonData(mon, MON_DATA_PP_BONUSES); + ++size; + break; + case REQUEST_PPMOVE1_BATTLE: + case REQUEST_PPMOVE2_BATTLE: + case REQUEST_PPMOVE3_BATTLE: + case REQUEST_PPMOVE4_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE); + size = 1; + break; + case REQUEST_OTID_BATTLE: + data32 = GetMonData(mon, MON_DATA_OT_ID); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case REQUEST_EXP_BATTLE: + data32 = GetMonData(mon, MON_DATA_EXP); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case REQUEST_HP_EV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_HP_EV); + size = 1; + break; + case REQUEST_ATK_EV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_ATK_EV); + size = 1; + break; + case REQUEST_DEF_EV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_DEF_EV); + size = 1; + break; + case REQUEST_SPEED_EV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SPEED_EV); + size = 1; + break; + case REQUEST_SPATK_EV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SPATK_EV); + size = 1; + break; + case REQUEST_SPDEF_EV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SPDEF_EV); + size = 1; + break; + case REQUEST_FRIENDSHIP_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_FRIENDSHIP); + size = 1; + break; + case REQUEST_POKERUS_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_POKERUS); + size = 1; + break; + case REQUEST_MET_LOCATION_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_MET_LOCATION); + size = 1; + break; + case REQUEST_MET_LEVEL_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_MET_LEVEL); + size = 1; + break; + case REQUEST_MET_GAME_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_MET_GAME); + size = 1; + break; + case REQUEST_POKEBALL_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_POKEBALL); + size = 1; + break; + case REQUEST_ALL_IVS_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_HP_IV); + dst[1] = GetMonData(mon, MON_DATA_ATK_IV); + dst[2] = GetMonData(mon, MON_DATA_DEF_IV); + dst[3] = GetMonData(mon, MON_DATA_SPEED_IV); + dst[4] = GetMonData(mon, MON_DATA_SPATK_IV); + dst[5] = GetMonData(mon, MON_DATA_SPDEF_IV); + size = 6; + break; + case REQUEST_HP_IV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_HP_IV); + size = 1; + break; + case REQUEST_ATK_IV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_ATK_IV); + size = 1; + break; + case REQUEST_DEF_IV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_DEF_IV); + size = 1; + break; + case REQUEST_SPEED_IV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SPEED_IV); + size = 1; + break; + case REQUEST_SPATK_IV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SPATK_IV); + size = 1; + break; + case REQUEST_SPDEF_IV_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SPDEF_IV); + size = 1; + break; + case REQUEST_PERSONALITY_BATTLE: + data32 = GetMonData(mon, MON_DATA_PERSONALITY); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + dst[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case REQUEST_CHECKSUM_BATTLE: + data16 = GetMonData(mon, MON_DATA_CHECKSUM); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_STATUS_BATTLE: + data32 = GetMonData(mon, MON_DATA_STATUS); + dst[0] = (data32 & 0x000000FF); + dst[1] = (data32 & 0x0000FF00) >> 8; + dst[2] = (data32 & 0x00FF0000) >> 16; + dst[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case REQUEST_LEVEL_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_LEVEL); + size = 1; + break; + case REQUEST_HP_BATTLE: + data16 = GetMonData(mon, MON_DATA_HP); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_MAX_HP_BATTLE: + data16 = GetMonData(mon, MON_DATA_MAX_HP); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_ATK_BATTLE: + data16 = GetMonData(mon, MON_DATA_ATK); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_DEF_BATTLE: + data16 = GetMonData(mon, MON_DATA_DEF); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_SPEED_BATTLE: + data16 = GetMonData(mon, MON_DATA_SPEED); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_SPATK_BATTLE: + data16 = GetMonData(mon, MON_DATA_SPATK); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_SPDEF_BATTLE: + data16 = GetMonData(mon, MON_DATA_SPDEF); + dst[0] = data16; + dst[1] = data16 >> 8; + size = 2; + break; + case REQUEST_COOL_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_COOL); + size = 1; + break; + case REQUEST_BEAUTY_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_BEAUTY); + size = 1; + break; + case REQUEST_CUTE_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_CUTE); + size = 1; + break; + case REQUEST_SMART_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SMART); + size = 1; + break; + case REQUEST_TOUGH_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_TOUGH); + size = 1; + break; + case REQUEST_SHEEN_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SHEEN); + size = 1; + break; + case REQUEST_COOL_RIBBON_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_COOL_RIBBON); + size = 1; + break; + case REQUEST_BEAUTY_RIBBON_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case REQUEST_CUTE_RIBBON_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_CUTE_RIBBON); + size = 1; + break; + case REQUEST_SMART_RIBBON_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_SMART_RIBBON); + size = 1; + break; + case REQUEST_TOUGH_RIBBON_BATTLE: + dst[0] = GetMonData(mon, MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +static void PokedudeHandleGetRawMonData(void) +{ + PlayerHandleGetRawMonData(); +} + +static void PokedudeHandleSetMonData(void) +{ + u8 monToCheck; + u8 i; + + if (gBattleBufferA[gActiveBattler][2] == 0) + { + SetPokedudeMonData(gBattlerPartyIndexes[gActiveBattler]); + } + else + { + monToCheck = gBattleBufferA[gActiveBattler][2]; + for (i = 0; i < PARTY_SIZE; ++i) + { + if (monToCheck & 1) + SetPokedudeMonData(i); + monToCheck >>= 1; + } + } + PokedudeBufferExecCompleted(); +} + +static void SetPokedudeMonData(u8 monId) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBattler][3]; + struct MovePpInfo *moveData = (struct MovePpInfo *)&gBattleBufferA[gActiveBattler][3]; + s32 i; + struct Pokemon *mon; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + mon = &gPlayerParty[monId]; + else + mon = &gEnemyParty[monId]; + switch (gBattleBufferA[gActiveBattler][1]) + { + case REQUEST_ALL_BATTLE: + { + u8 iv; + + SetMonData(mon, MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(mon, MON_DATA_HELD_ITEM, &battlePokemon->item); + for (i = 0; i < MAX_MON_MOVES; ++i) + { + SetMonData(mon, MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(mon, MON_DATA_PP1 + i, &battlePokemon->pp[i]); + } + SetMonData(mon, MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(mon, MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(mon, MON_DATA_EXP, &battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(mon, MON_DATA_HP_IV, &iv); + iv = battlePokemon->attackIV; + SetMonData(mon, MON_DATA_ATK_IV, &iv); + iv = battlePokemon->defenseIV; + SetMonData(mon, MON_DATA_DEF_IV, &iv); + iv = battlePokemon->speedIV; + SetMonData(mon, MON_DATA_SPEED_IV, &iv); + iv = battlePokemon->spAttackIV; + SetMonData(mon, MON_DATA_SPATK_IV, &iv); + iv = battlePokemon->spDefenseIV; + SetMonData(mon, MON_DATA_SPDEF_IV, &iv); + SetMonData(mon, MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(mon, MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(mon, MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(mon, MON_DATA_HP, &battlePokemon->hp); + SetMonData(mon, MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(mon, MON_DATA_ATK, &battlePokemon->attack); + SetMonData(mon, MON_DATA_DEF, &battlePokemon->defense); + SetMonData(mon, MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(mon, MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(mon, MON_DATA_SPDEF, &battlePokemon->spDefense); + } + break; + case REQUEST_SPECIES_BATTLE: + SetMonData(mon, MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_HELDITEM_BATTLE: + SetMonData(mon, MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_MOVES_PP_BATTLE: + for (i = 0; i < MAX_MON_MOVES; ++i) + { + SetMonData(mon, MON_DATA_MOVE1 + i, &moveData->moves[i]); + SetMonData(mon, MON_DATA_PP1 + i, &moveData->pp[i]); + } + SetMonData(mon, MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case REQUEST_MOVE1_BATTLE: + case REQUEST_MOVE2_BATTLE: + case REQUEST_MOVE3_BATTLE: + case REQUEST_MOVE4_BATTLE: + SetMonData(mon, MON_DATA_MOVE1 + gBattleBufferA[gActiveBattler][1] - REQUEST_MOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_PP_DATA_BATTLE: + SetMonData(mon, MON_DATA_PP1, &gBattleBufferA[gActiveBattler][3]); + SetMonData(mon, MON_DATA_PP2, &gBattleBufferA[gActiveBattler][4]); + SetMonData(mon, MON_DATA_PP3, &gBattleBufferA[gActiveBattler][5]); + SetMonData(mon, MON_DATA_PP4, &gBattleBufferA[gActiveBattler][6]); + SetMonData(mon, MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBattler][7]); + break; + case REQUEST_PPMOVE1_BATTLE: + case REQUEST_PPMOVE2_BATTLE: + case REQUEST_PPMOVE3_BATTLE: + case REQUEST_PPMOVE4_BATTLE: + SetMonData(mon, MON_DATA_PP1 + gBattleBufferA[gActiveBattler][1] - REQUEST_PPMOVE1_BATTLE, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_OTID_BATTLE: + SetMonData(mon, MON_DATA_OT_ID, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_EXP_BATTLE: + SetMonData(mon, MON_DATA_EXP, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_HP_EV_BATTLE: + SetMonData(mon, MON_DATA_HP_EV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_ATK_EV_BATTLE: + SetMonData(mon, MON_DATA_ATK_EV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_DEF_EV_BATTLE: + SetMonData(mon, MON_DATA_DEF_EV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPEED_EV_BATTLE: + SetMonData(mon, MON_DATA_SPEED_EV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPATK_EV_BATTLE: + SetMonData(mon, MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPDEF_EV_BATTLE: + SetMonData(mon, MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_FRIENDSHIP_BATTLE: + SetMonData(mon, MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_POKERUS_BATTLE: + SetMonData(mon, MON_DATA_POKERUS, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_MET_LOCATION_BATTLE: + SetMonData(mon, MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_MET_LEVEL_BATTLE: + SetMonData(mon, MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_MET_GAME_BATTLE: + SetMonData(mon, MON_DATA_MET_GAME, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_POKEBALL_BATTLE: + SetMonData(mon, MON_DATA_POKEBALL, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_ALL_IVS_BATTLE: + SetMonData(mon, MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + SetMonData(mon, MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][4]); + SetMonData(mon, MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][5]); + SetMonData(mon, MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][6]); + SetMonData(mon, MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][7]); + SetMonData(mon, MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][8]); + break; + case REQUEST_HP_IV_BATTLE: + SetMonData(mon, MON_DATA_HP_IV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_ATK_IV_BATTLE: + SetMonData(mon, MON_DATA_ATK_IV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_DEF_IV_BATTLE: + SetMonData(mon, MON_DATA_DEF_IV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPEED_IV_BATTLE: + SetMonData(mon, MON_DATA_SPEED_IV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPATK_IV_BATTLE: + SetMonData(mon, MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPDEF_IV_BATTLE: + SetMonData(mon, MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_PERSONALITY_BATTLE: + SetMonData(mon, MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_CHECKSUM_BATTLE: + SetMonData(mon, MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_STATUS_BATTLE: + SetMonData(mon, MON_DATA_STATUS, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_LEVEL_BATTLE: + SetMonData(mon, MON_DATA_LEVEL, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_HP_BATTLE: + SetMonData(mon, MON_DATA_HP, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_MAX_HP_BATTLE: + SetMonData(mon, MON_DATA_MAX_HP, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_ATK_BATTLE: + SetMonData(mon, MON_DATA_ATK, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_DEF_BATTLE: + SetMonData(mon, MON_DATA_DEF, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPEED_BATTLE: + SetMonData(mon, MON_DATA_SPEED, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPATK_BATTLE: + SetMonData(mon, MON_DATA_SPATK, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SPDEF_BATTLE: + SetMonData(mon, MON_DATA_SPDEF, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_COOL_BATTLE: + SetMonData(mon, MON_DATA_COOL, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_BEAUTY_BATTLE: + SetMonData(mon, MON_DATA_BEAUTY, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_CUTE_BATTLE: + SetMonData(mon, MON_DATA_CUTE, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SMART_BATTLE: + SetMonData(mon, MON_DATA_SMART, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_TOUGH_BATTLE: + SetMonData(mon, MON_DATA_TOUGH, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SHEEN_BATTLE: + SetMonData(mon, MON_DATA_SHEEN, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_COOL_RIBBON_BATTLE: + SetMonData(mon, MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_BEAUTY_RIBBON_BATTLE: + SetMonData(mon, MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_CUTE_RIBBON_BATTLE: + SetMonData(mon, MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_SMART_RIBBON_BATTLE: + SetMonData(mon, MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBattler][3]); + break; + case REQUEST_TOUGH_RIBBON_BATTLE: + SetMonData(mon, MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBattler][3]); + break; + } + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); +} + +static void PokedudeHandleSetRawMonData(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleLoadMonSprite(void) +{ + u32 y; + u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES); + + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + y = GetBattlerSpriteDefault_Y(gActiveBattler); + SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + GetBattlerSpriteCoord(gActiveBattler, 2), + y, + GetBattlerSpriteSubpriority(gActiveBattler)); + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = species; + gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; + StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); + SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); + gBattlerControllerFuncs[gActiveBattler] = sub_8156184; + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleSwitchInAnim(void) +{ + ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; + BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + gActionSelectionCursor[gActiveBattler] = 0; + gMoveSelectionCursor[gActiveBattler] = 0; + sub_8159478(gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = sub_81563A8; +} + +static void PokedudeHandleReturnMonToBall(void) +{ + if (gBattleBufferA[gActiveBattler][1] == 0) + { + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); + gBattlerControllerFuncs[gActiveBattler] = sub_8156F7C; + } + else + { + FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); + DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[gActiveBattler]); + PokedudeBufferExecCompleted(); + } +} + +static void PokedudeHandleDrawTrainerPic(void) +{ + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + DecompressTrainerBackPalette(4, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(4, GetBattlerPosition(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + 80, + (8 - gTrainerBackPicCoords[4].size) * 4 + 80, + 30); + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; + gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + } + else + { + u32 tranerPicid = TRAINER_PIC_PROFESSOR_OAK; + DecompressTrainerFrontPic(tranerPicid, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(tranerPicid, GetBattlerPosition(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + 176, + (8 - gTrainerFrontPicCoords[tranerPicid].size) * 4 + 40, + GetBattlerSpriteSubpriority(gActiveBattler)); + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; + gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[tranerPicid].tag); + gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; + gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[tranerPicid].tag); + gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = tranerPicid; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + } + gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; +} + +static void PokedudeHandleTrainerSlide(void) +{ + DecompressTrainerBackPalette(4, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(4, GetBattlerPosition(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + 80, + (8 - gTrainerBackPicCoords[4].size) * 4 + 80, + 30); + gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; +} + +static void PokedudeHandleTrainerSlideBack(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleFaintAnimation(void) +{ + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState == 0) + { + if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); + ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState; + } + else + { + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); + PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_ATTACKER); + gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; + } + else + { + PlaySE12WithPanning(SE_POKE_DEAD, SOUND_PAN_TARGET); + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon; + } + gBattlerControllerFuncs[gActiveBattler] = sub_8156DCC; + } + } +} + +static void PokedudeHandlePaletteFade(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleSuccessBallThrowAnim(void) +{ + gBattleSpritesDataPtr->animationData->ballThrowCaseId = BALL_3_SHAKES_SUCCESS; + gDoingBattleAnim = TRUE; + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW); + gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; +} + +static void PokedudeHandleBallThrowAnim(void) +{ + u8 ballThrowCaseId = gBattleBufferA[gActiveBattler][1]; + + gBattleSpritesDataPtr->animationData->ballThrowCaseId = ballThrowCaseId; + gDoingBattleAnim = TRUE; + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), B_ANIM_BALL_THROW); + gBattlerControllerFuncs[gActiveBattler] = CompleteOnSpecialAnimDone; +} + +static void PokedudeHandlePause(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleMoveAnimation(void) +{ + u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + + gAnimMoveTurn = gBattleBufferA[gActiveBattler][3]; + gAnimMovePower = gBattleBufferA[gActiveBattler][4] | (gBattleBufferA[gActiveBattler][5] << 8); + gAnimMoveDmg = gBattleBufferA[gActiveBattler][6] | (gBattleBufferA[gActiveBattler][7] << 8) | (gBattleBufferA[gActiveBattler][8] << 16) | (gBattleBufferA[gActiveBattler][9] << 24); + gAnimFriendship = gBattleBufferA[gActiveBattler][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8); + gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16]; + gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality; + if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE + { + PokedudeBufferExecCompleted(); + } + else + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + gBattlerControllerFuncs[gActiveBattler] = PokedudeDoMoveAnimation; + } +} + +static void PokedudeDoMoveAnimation(void) +{ + u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); + + switch (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState) + { + case 0: + if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SUBSTITUTE_TO_MON); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 1; + break; + case 1: + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + { + sub_8035450(0); + DoMoveAnim(move); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_8035450(1); + if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) + InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; + } + break; + case 3: + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) + { + CopyAllBattleSpritesInvisibilities(); + TrySetBehindSubstituteSpriteBit(gActiveBattler, gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; + PokedudeBufferExecCompleted(); + } + break; + } +} + +static void PokedudeHandlePrintString(void) +{ + u16 *stringId; + + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); + BufferStringBattle(*stringId); + if (sub_80D89B0(*stringId)) + BattlePutTextOnWindow(gDisplayedStringBattle, 64); + else + BattlePutTextOnWindow(gDisplayedStringBattle, 0); + gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; +} + +static void PokedudeHandlePrintSelectionString(void) +{ + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + PokedudeHandlePrintString(); + else + PokedudeBufferExecCompleted(); +} + +static void sub_8158B20(void) +{ + if (!IsDma3ManagerBusyWithBgCopy()) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; + gBattlerControllerFuncs[gActiveBattler] = sub_8156140; + } +} + +static void PokedudeHandleChooseAction(void) +{ + s32 i; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + gBattlerControllerFuncs[gActiveBattler] = sub_8158B20; + BattlePutTextOnWindow(gUnknown_83FDA4C, 0); + BattlePutTextOnWindow(gUnknown_83FE725, 2); + for (i = 0; i < MAX_MON_MOVES; ++i) + ActionSelectionDestroyCursorAt((u8)i); + ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); + BattlePutTextOnWindow(gDisplayedStringBattle, 1); + } + else + { + gBattlerControllerFuncs[gActiveBattler] = sub_8156140; + } +} + +static void PokedudeHandleUnknownYesNoBox(void) +{ + PokedudeBufferExecCompleted(); +} + +static void sub_8158C04(void) +{ + if (!IsDma3ManagerBusyWithBgCopy()) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 320; + gBattlerControllerFuncs[gActiveBattler] = sub_81564E4; + } +} + +static void PokedudeHandleChooseMove(void) +{ + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + InitMoveSelectionsVarsAndStrings(); + gBattlerControllerFuncs[gActiveBattler] = sub_8158C04; + } + else + { + gBattlerControllerFuncs[gActiveBattler] = sub_81564E4; + } +} + +static void PokedudeHandleChooseItem(void) +{ + s32 i; + + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem; + gBattlerInMenuId = gActiveBattler; + for (i = 0; i < 3; ++i) + gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][i + 1]; +} + +static void PokedudeHandleChoosePokemon(void) +{ + s32 i; + + gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF); + gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; + *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; + *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; + *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; + for (i = 0; i < 3; ++i) + gUnknown_203B0DC[i] = gBattleBufferA[gActiveBattler][4 + i]; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon; + gBattlerInMenuId = gActiveBattler; +} + +static void PokedudeHandleCmd23(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleHealthBarUpdate(void) +{ + s16 hpVal; + struct Pokemon *mon; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + LoadBattleBarGfx(0); + hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + if (hpVal != INSTANT_HP_BAR_DROP) + { + u32 maxHP = GetMonData(mon, MON_DATA_MAX_HP); + u32 curHP = GetMonData(mon, MON_DATA_HP); + + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); + } + else + { + u32 maxHP = GetMonData(mon, MON_DATA_MAX_HP); + + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); + UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); + } + gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthbarDone; +} + +static void PokedudeHandleExpUpdate(void) +{ + u8 monId = gBattleBufferA[gActiveBattler][1]; + + if (GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL) >= MAX_LEVEL) + { + PokedudeBufferExecCompleted(); + } + else + { + s16 expPointsToGive; + u8 taskId; + + LoadBattleBarGfx(1); + GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value. + expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]); + taskId = CreateTask(Task_GiveExpToMon, 10); + gTasks[taskId].tExpTask_monId = monId; + gTasks[taskId].tExpTask_gainedExp = expPointsToGive; + gTasks[taskId].tExpTask_battler = gActiveBattler; + gBattlerControllerFuncs[gActiveBattler] = nullsub_99; + } +} + +static void PokedudeHandleStatusIconUpdate(void) +{ + if (!mplay_80342A4(gActiveBattler)) + { + u8 battlerId; + struct Pokemon *mon; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_STATUS_ICON); + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = FALSE; + gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; + } +} + +static void PokedudeHandleStatusAnimation(void) +{ + if (!mplay_80342A4(gActiveBattler)) + { + InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], + gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); + gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; + } +} + +static void PokedudeHandleStatusXor(void) +{ + struct Pokemon *mon; + u8 val; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + val = GetMonData(mon, MON_DATA_STATUS) ^ gBattleBufferA[gActiveBattler][1]; + SetMonData(mon, MON_DATA_STATUS, &val); + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleDataTransfer(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleDMA3Transfer(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandlePlayBGM(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleCmd32(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleTwoReturnValues(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleChosenMonReturnValue(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleOneReturnValue(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleOneReturnValue_Duplicate(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleCmd37(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleCmd38(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleCmd39(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleCmd40(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleHitAnimation(void) +{ + if (gSprites[gBattlerSpriteIds[gActiveBattler]].invisible == TRUE) + { + PokedudeBufferExecCompleted(); + } + else + { + gDoingBattleAnim = TRUE; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; + DoHitAnimHealthboxEffect(gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = DoHitAnimBlinkSpriteEffect; + } +} + +static void PokedudeHandleCmd42(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandlePlaySE(void) +{ + PlaySE(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandlePlayFanfare(void) +{ + PlayFanfare(gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8)); + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleFaintingCry(void) +{ + struct Pokemon *mon; + u16 species; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + else + mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; + species = GetMonData(mon, MON_DATA_SPECIES); + PlayCry1(species, 25); + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleIntroSlide(void) +{ + HandleIntroSlide(gBattleBufferA[gActiveBattler][1]); + gIntroSlideFlags |= 1; + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleIntroTrainerBallThrow(void) +{ + u8 paletteNum; + u8 taskId; + + SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[gActiveBattler]]); + gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; + gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); + paletteNum = AllocSpritePalette(0xD6F8); + LoadCompressedPalette(gTrainerBackPicPaletteTable[4].data, 0x100 + paletteNum * 16, 32); + gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; + taskId = CreateTask(sub_81595EC, 5); + gTasks[taskId].data[0] = gActiveBattler; + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) + gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; + gBattleSpritesDataPtr->animationData->field_9_x1 = 1; + gBattlerControllerFuncs[gActiveBattler] = nullsub_99; +} + +static void sub_8159478(u8 battlerId) +{ + u16 species; + + gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE; + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); + SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); + gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + GetBattlerSpriteSubpriority(battlerId)); + gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; + gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); +} + +static void sub_81595EC(u8 taskId) +{ + if (gTasks[taskId].data[1] < 31) + { + ++gTasks[taskId].data[1]; + } + else + { + u8 savedActiveBattler = gActiveBattler; + + gActiveBattler = gTasks[taskId].data[0]; + gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; + sub_8159478(gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = sub_8156624; + gActiveBattler = savedActiveBattler; + DestroyTask(taskId); + } +} + +static void PokedudeHandleDrawPartyStatusSummary(void) +{ + if (gBattleBufferA[gActiveBattler][1] != 0 + && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + PokedudeBufferExecCompleted(); + } + else + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE; + gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, + (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], + gBattleBufferA[gActiveBattler][1], + gBattleBufferA[gActiveBattler][2]); + PokedudeBufferExecCompleted(); + } +} + +static void PokedudeHandleHidePartyStatusSummary(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleEndBounceEffect(void) +{ + EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); + EndBounceEffect(gActiveBattler, BOUNCE_MON); + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleSpriteInvisibility(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleBattleAnimation(void) +{ + u8 animationId = gBattleBufferA[gActiveBattler][1]; + u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); + + if (TryHandleLaunchBattleTableAnimation(gActiveBattler, gActiveBattler, gActiveBattler, animationId, argument)) + PokedudeBufferExecCompleted(); + else + gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation; +} + +static void PokedudeHandleLinkStandbyMsg(void) +{ + switch (gBattleBufferA[gActiveBattler][1]) + { + case 0: + case 1: + EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); + EndBounceEffect(gActiveBattler, BOUNCE_MON); + break; + case 2: + break; + } + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleResetActionMoveSelection(void) +{ + PokedudeBufferExecCompleted(); +} + +static void PokedudeHandleCmd55(void) +{ + gBattleOutcome = gBattleBufferA[gActiveBattler][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + PokedudeBufferExecCompleted(); + if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK) + gBattlerControllerFuncs[gActiveBattler] = sub_8156254; +} + +static void PokedudeCmdEnd(void) +{ +} + +static void sub_8159824(void) +{ + const u8 (*r7)[8] = gUnknown_8479060[gBattleStruct->field_96]; + + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + { + DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); + DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); + } + if (*(r7[gUnknown_3005EE0[gActiveBattler][0]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2]) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + PlaySE(SE_SELECT); + gUnknown_3005EE0[gActiveBattler][2] = 0; + switch (r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler]) + { + case 0: + BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0); + break; + case 1: + BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0); + break; + case 2: + BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0); + break; + case 3: + BtlController_EmitTwoReturnValues(1, B_ACTION_RUN, 0); + break; + } + PokedudeBufferExecCompleted(); + ++gUnknown_3005EE0[gActiveBattler][0]; + if (r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler] == 4) + gUnknown_3005EE0[gActiveBattler][0] = 0; + } + else + { + if (gActionSelectionCursor[gActiveBattler] != r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler] + && r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler + 4] / 2 == gUnknown_3005EE0[gActiveBattler][2]) + { + PlaySE(SE_SELECT); + ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); + gActionSelectionCursor[gActiveBattler] = r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler]; + ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); + } + ++gUnknown_3005EE0[gActiveBattler][2]; + } +} + +static void sub_8159998(void) +{ + const u8 (*r7)[8] = gUnknown_84790D8[gBattleStruct->field_96]; + + if (*(r7[gUnknown_3005EE0[gActiveBattler][1]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2]) + { + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + PlaySE(SE_SELECT); + gUnknown_3005EE0[gActiveBattler][2] = 0; + BtlController_EmitTwoReturnValues(1, + B_ACTION_EXEC_SCRIPT, + r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] | ((gActiveBattler ^ BIT_SIDE) << 8)); + PokedudeBufferExecCompleted(); + ++gUnknown_3005EE0[gActiveBattler][1]; + if (r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] == 255) + gUnknown_3005EE0[gActiveBattler][1] = 0; + } + else + { + if (r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] != gMoveSelectionCursor[gActiveBattler] + && r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler + 4] / 2 == gUnknown_3005EE0[gActiveBattler][2]) + { + PlaySE(SE_SELECT); + MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); + gMoveSelectionCursor[gActiveBattler] = r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler]; + MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); + } + ++gUnknown_3005EE0[gActiveBattler][2]; + } +} + +#ifdef NONMATCHING +static bool8 sub_8159AB8(void) +{ + const struct Unk_84790E8 *r6 = gUnknown_8479198[gBattleStruct->field_96]; + // why is address of unk_2 loaded first? + const struct Unk_84790E8 *r12 = (const struct Unk_84790E8 *)gBattleBufferA[gActiveBattler]; + + if (r12->unk_0 == r6[gBattleStruct->field_97].unk_0 + && gActiveBattler == r6[gBattleStruct->field_97].unk_1 + && (r12->unk_0 != 16 || r6[gBattleStruct->field_97].unk_2 == r12->unk_2)) + { + // why is mem reloaded here? + // asm("":::"memory"); + if (r6[gBattleStruct->field_97].unk_4 != NULL) + { + gBattlerControllerFuncs[gActiveBattler] = r6[gBattleStruct->field_97].unk_4; + gUnknown_3005EE0[gActiveBattler][2] = 0; + gUnknown_3005EE0[gActiveBattler][3] = r6[gBattleStruct->field_97].unk_2; + ++gBattleStruct->field_97; + return TRUE; + } + ++gBattleStruct->field_97; + } + return FALSE; +} +#else +NAKED +static bool8 sub_8159AB8(void) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + ldr r1, _08159B54 @ =gUnknown_8479198\n\ + ldr r4, _08159B58 @ =gBattleStruct\n\ + ldr r2, [r4]\n\ + adds r0, r2, 0\n\ + adds r0, 0x96\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r6, [r0]\n\ + ldr r3, _08159B5C @ =gActiveBattler\n\ + ldrb r5, [r3]\n\ + lsls r1, r5, 9\n\ + ldr r0, _08159B60 @ =gBattleBufferA + 2\n\ + adds r7, r1, r0\n\ + mov r12, r7\n\ + subs r0, 0x2\n\ + adds r1, r0\n\ + adds r2, 0x97\n\ + ldrb r0, [r2]\n\ + lsls r0, 3\n\ + adds r0, r6\n\ + ldrb r1, [r1]\n\ + adds r7, r4, 0\n\ + adds r4, r3, 0\n\ + ldrb r2, [r0]\n\ + cmp r1, r2\n\ + bne _08159B70\n\ + ldrb r2, [r0, 0x1]\n\ + cmp r5, r2\n\ + bne _08159B70\n\ + cmp r1, 0x10\n\ + bne _08159B04\n\ + ldrh r0, [r0, 0x2]\n\ + mov r1, r12\n\ + ldrh r1, [r1]\n\ + cmp r0, r1\n\ + bne _08159B70\n\ + _08159B04:\n\ + ldr r0, [r7]\n\ + adds r3, r0, 0\n\ + adds r3, 0x97\n\ + ldrb r1, [r3]\n\ + lsls r0, r1, 3\n\ + adds r0, r6\n\ + ldr r2, [r0, 0x4]\n\ + cmp r2, 0\n\ + beq _08159B6C\n\ + ldr r1, _08159B64 @ =gBattlerControllerFuncs\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + str r2, [r0]\n\ + ldr r2, _08159B68 @ =gUnknown_3005EE0\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r1, [r0]\n\ + movs r0, 0\n\ + strb r0, [r1, 0x2]\n\ + ldrb r0, [r4]\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r1, [r0]\n\ + ldr r0, [r7]\n\ + adds r0, 0x97\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r0, r6\n\ + ldrh r0, [r0, 0x2]\n\ + strb r0, [r1, 0x3]\n\ + ldr r1, [r7]\n\ + adds r1, 0x97\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + movs r0, 0x1\n\ + b _08159B72\n\ + .align 2, 0\n\ + _08159B54: .4byte gUnknown_8479198\n\ + _08159B58: .4byte gBattleStruct\n\ + _08159B5C: .4byte gActiveBattler\n\ + _08159B60: .4byte gBattleBufferA + 2\n\ + _08159B64: .4byte gBattlerControllerFuncs\n\ + _08159B68: .4byte gUnknown_3005EE0\n\ + _08159B6C:\n\ + adds r0, r1, 0x1\n\ + strb r0, [r3]\n\ + _08159B70:\n\ + movs r0, 0\n\ + _08159B72:\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + "); +} +#endif + +static void sub_8159B78(void) +{ + gUnknown_3005EE0[gActiveBattler][2] = 0; + gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand; +} + +static void sub_8159BA8(void) +{ + switch (gUnknown_3005EE0[gActiveBattler][2]) + { + case 0: + if (!gPaletteFade.active) + { + BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 1: + if (!gPaletteFade.active) + { + gUnknown_3005EE0[gActiveBattler][4] = gBattle_BG0_Y; + sub_80EB30C(); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 2: + gBattle_BG0_Y = 0; + BattleStringExpandPlaceholdersToDisplayedString(sub_8159EF0()); + BattlePutTextOnWindow(gDisplayedStringBattle, 24); + ++gUnknown_3005EE0[gActiveBattler][2]; + break; + case 3: + if (!IsTextPrinterActive(24) && JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFF7F, 4, 8, 0, RGB_BLACK); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 4: + if (!gPaletteFade.active) + { + if (gUnknown_3005EE0[gActiveBattler][3] == 13) + { + BattleStopLowHpSound(); + PlayBGM(MUS_WIN_YASEI); + } + gBattle_BG0_Y = gUnknown_3005EE0[gActiveBattler][4]; + sub_80EB524(); + sub_8159B78(); + } + break; + } +} + +static void sub_8159D04(void) +{ + switch (gUnknown_3005EE0[gActiveBattler][2]) + { + case 0: + if (!gPaletteFade.active) + { + sub_80EEFC8(&gBattleStruct->field_95, + &gBattleStruct->field_94, + GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); + BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 1: + if (!gPaletteFade.active) + { + u32 mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16; + + ++mask; // It's possible that this is influenced by other functions, as + --mask; // this also striked in battle_controller_oak_old_man.c but was naturally fixed. + BeginNormalPaletteFade(mask, 4, 8, 0, RGB_BLACK); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 2: + if (!gPaletteFade.active) + { + sub_80EB30C(); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 3: + BattleStringExpandPlaceholdersToDisplayedString(sub_8159EF0()); + BattlePutTextOnWindow(gDisplayedStringBattle, 24); + ++gUnknown_3005EE0[gActiveBattler][2]; + break; + case 4: + if (!IsTextPrinterActive(24) && JOY_NEW(A_BUTTON)) + { + u32 mask; + + PlaySE(SE_SELECT); + mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16; + ++mask; + --mask; + BeginNormalPaletteFade(mask, 4, 0, 8, RGB_BLACK); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 5: + if (!gPaletteFade.active) + { + BeginNormalPaletteFade(0xFFFFFF7F, 4, 8, 0, RGB_BLACK); + ++gUnknown_3005EE0[gActiveBattler][2]; + } + break; + case 6: + if (!gPaletteFade.active) + { + if (gUnknown_3005EE0[gActiveBattler][3] == 13) + { + BattleStopLowHpSound(); + PlayBGM(MUS_WIN_YASEI); + } + sub_80EF0E0(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); + sub_80EB524(); + sub_8159B78(); + } + break; + } +} + +static const u8 *sub_8159EF0(void) +{ + switch (gBattleStruct->field_96) + { + case 0: + default: + return gUnknown_84791A8[gBattleStruct->field_97 - 1]; + case 1: + return gUnknown_84791B8[gBattleStruct->field_97 - 1]; + case 2: + return gUnknown_84791CC[gBattleStruct->field_97 - 1]; + case 3: + return gUnknown_84791E8[gBattleStruct->field_97 - 1]; + } +} + +void InitPokedudePartyAndOpponent(void) +{ + s32 i, j; + struct Pokemon *mon; + s32 myIdx = 0; + s32 opIdx = 0; + const struct PokedudeBattlePartyInfo *data; + + gBattleTypeFlags = BATTLE_TYPE_POKEDUDE; + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + data = sPokedudeBattlePartyPointers[gSpecialVar_0x8004]; + i = 0; + do + { + if (data[i].side == B_SIDE_PLAYER) + mon = &gPlayerParty[myIdx++]; + else + mon = &gEnemyParty[opIdx++]; + CreateMonWithGenderNatureLetter(mon, data[i].species, data[i].level, 0, data[i].gender, data[i].nature, 0); + for (j = 0; j < 4; ++j) + SetMonMoveSlot(mon, data[i].moves[j], j); + } while (data[++i].side != 0xFF); +} diff --git a/src/battle_controllers.c b/src/battle_controllers.c index f3530fc4b..6fb090307 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -85,9 +85,9 @@ static void InitSinglePlayerBtlControllers(void) gBattleMainFunc = BeginBattleIntro; if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) { - gBattlerControllerFuncs[0] = SetControllerToPokeDude; + gBattlerControllerFuncs[0] = SetControllerToPokedude; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; - gBattlerControllerFuncs[1] = SetControllerToPokeDude; + gBattlerControllerFuncs[1] = SetControllerToPokedude; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlersCount = 2; } @@ -110,13 +110,13 @@ static void InitSinglePlayerBtlControllers(void) gBattleMainFunc = BeginBattleIntro; if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) { - gBattlerControllerFuncs[0] = SetControllerToPokeDude; + gBattlerControllerFuncs[0] = SetControllerToPokedude; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; - gBattlerControllerFuncs[1] = SetControllerToPokeDude; + gBattlerControllerFuncs[1] = SetControllerToPokedude; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; - gBattlerControllerFuncs[2] = SetControllerToPokeDude; + gBattlerControllerFuncs[2] = SetControllerToPokedude; gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; - gBattlerControllerFuncs[3] = SetControllerToPokeDude; + gBattlerControllerFuncs[3] = SetControllerToPokedude; gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; gBattlersCount = MAX_BATTLERS_COUNT; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 181f59b09..c5c8e89a4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7064,7 +7064,7 @@ static void atk8F_forcerandomswitch(void) u8 valid; u8 val; - if (!GetBattlerSide(gBattlerTarget)) + if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) party = gPlayerParty; else party = gEnemyParty; diff --git a/src/battle_setup.c b/src/battle_setup.c index b9da39ddb..9fef6a8a5 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -13,7 +13,6 @@ #include "strings.h" #include "string_util.h" #include "event_data.h" -#include "unk_8159F40.h" #include "map_obj_80688E4.h" #include "metatile_behavior.h" #include "event_scripts.h" @@ -28,6 +27,7 @@ #include "battle.h" #include "battle_setup.h" #include "battle_transition.h" +#include "battle_controllers.h" #include "constants/battle_setup.h" #include "constants/flags.h" #include "constants/items.h" @@ -172,7 +172,7 @@ static const union AffineAnimCmd gUnknown_83E733C[] = AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18), AFFINEANIMCMD_LOOP(0), - AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8), + AFFINEANIMCMD_FRAME(-0x5, -0x5, 0, 8), AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8), AFFINEANIMCMD_LOOP(5), AFFINEANIMCMD_END, @@ -202,7 +202,7 @@ static void sub_80B3FAC(struct Sprite *sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[0] = -gBattleAnimArgs[0]; } - else if (!GetBattlerSide(gBattleAnimTarget)) + else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) { StartSpriteAffineAnim(sprite, 1); gBattleAnimArgs[1] = -gBattleAnimArgs[1]; @@ -226,7 +226,7 @@ static void sub_80B407C(struct Sprite *sprite) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; StartSpriteAffineAnim(sprite, 2); } - else if (!GetBattlerSide(gBattleAnimTarget)) + else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; gBattleAnimArgs[0] = -gBattleAnimArgs[0]; @@ -283,12 +283,12 @@ static void sub_80B41C0(struct Sprite *sprite) static void sub_80B41F8(struct Sprite *sprite) { SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y); - if (GetBattlerSide(gBattleAnimAttacker)) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->pos1.x -= gBattleAnimArgs[0]; else sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; - if (!GetBattlerSide(gBattleAnimTarget)) + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) sprite->pos1.y += 8; sprite->callback = sub_80B4274; } @@ -356,7 +356,7 @@ static void AnimTranslateStinger(struct Sprite *sprite) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - else if (GetBattlerSide(gBattleAnimAttacker)) + else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; gBattleAnimArgs[1] = -gBattleAnimArgs[1]; @@ -399,7 +399,7 @@ static void AnimTranslateStinger(struct Sprite *sprite) static void AnimMissileArc(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, 1); - if (GetBattlerSide(gBattleAnimAttacker)) + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; diff --git a/src/electric.c b/src/electric.c new file mode 100644 index 000000000..025eac48b --- /dev/null +++ b/src/electric.c @@ -0,0 +1,1272 @@ +#include "global.h" +#include "battle_anim.h" +#include "trig.h" +#include "sound.h" +#include "constants/songs.h" + +static void sub_80ADBEC(struct Sprite *sprite); +static void sub_80ADC58(struct Sprite *sprite); +static void sub_80ADCB8(struct Sprite *sprite); +static void sub_80ADD4C(struct Sprite *sprite); +static void sub_80ADEB0(struct Sprite *sprite); +static void sub_80AE000(struct Sprite *sprite); +static void sub_80AE06C(struct Sprite *sprite); +static void sub_80AE1A0(struct Sprite *sprite); +static void sub_80AE420(struct Sprite *sprite); +static void sub_80AE470(struct Sprite *sprite); +static void sub_80AE71C(struct Sprite *sprite); +static void sub_80AE774(struct Sprite *sprite); +static void sub_80AE7DC(struct Sprite *sprite); +static void sub_80AEC34(struct Sprite *sprite); +static void sub_80AEC80(struct Sprite *sprite); +static void sub_80AEF60(struct Sprite *sprite); +static void sub_80ADC3C(struct Sprite *sprite); +static void sub_80ADC9C(struct Sprite *sprite); +static void sub_80ADF38(struct Sprite *sprite); +static void sub_80AE130(struct Sprite *sprite); +static void sub_80AE278(u8 taskId); +static void sub_80AE4F4(struct Sprite *sprite); +static void sub_80AE5BC(u8 taskId); +static void sub_80AE704(struct Sprite *sprite); +static void sub_80AE83C(struct Sprite *sprite); +static bool8 sub_80AEB98(struct Task *task, u8 taskId); +static bool8 sub_80AEE74(struct Task *task, u8 taskId); +static bool8 sub_80AF058(struct Task *task, u8 taskId); +static void sub_80AF0C8(struct Sprite *sprite); + +static const union AnimCmd gUnknown_83E5F1C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 8), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E5F34[] = +{ + gUnknown_83E5F1C, +}; + +const struct SpriteTemplate gUnknown_83E5F38 = +{ + .tileTag = ANIM_TAG_LIGHTNING, + .paletteTag = ANIM_TAG_LIGHTNING, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5F34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80ADBEC, +}; + +static const union AffineAnimCmd gUnknown_83E5F50[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 20), + AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 60), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E5F70[] = +{ + gUnknown_83E5F50, +}; + +const struct SpriteTemplate gUnknown_83E5F74 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83ACA38, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E5F70, + .callback = sub_80ADC58, +}; + +static const union AnimCmd gUnknown_83E5F8C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_FRAME(80, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E5FA8[] = +{ + gUnknown_83E5F8C, +}; + +const struct SpriteTemplate gUnknown_83E5FAC = +{ + .tileTag = ANIM_TAG_SHOCK, + .paletteTag = ANIM_TAG_SHOCK, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5FA8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80ADCB8, +}; + +const struct SpriteTemplate gUnknown_83E5FC4 = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80ADD4C, +}; + +const struct SpriteTemplate gUnknown_83E5FDC = +{ + .tileTag = ANIM_TAG_BLACK_BALL_2, + .paletteTag = ANIM_TAG_BLACK_BALL_2, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +static const union AffineAnimCmd gUnknown_83E5FF4[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E6004[] = +{ + gUnknown_83E5FF4, +}; + +const struct SpriteTemplate gUnknown_83E6008 = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6004, + .callback = sub_80ADEB0, +}; + +static const union AnimCmd gUnknown_83E6020[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E6030[] = +{ + gUnknown_83E6020, +}; + +static const union AffineAnimCmd gUnknown_83E6034[] = +{ + AFFINEANIMCMD_FRAME(0xE8, 0xE8, 0, 0), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 10), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E6054[] = +{ + gUnknown_83E6034, +}; + +const struct SpriteTemplate gUnknown_83E6058 = +{ + .tileTag = ANIM_TAG_SHOCK_3, + .paletteTag = ANIM_TAG_SHOCK_3, + .oam = &gOamData_83ACA38, + .anims = gUnknown_83E6030, + .images = NULL, + .affineAnims = gUnknown_83E6054, + .callback = sub_80AE000, +}; + +const struct SpriteTemplate gUnknown_83E6070 = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6004, + .callback = sub_80AE06C, +}; + +const struct SpriteTemplate gElectricitySpriteTemplate = +{ + .tileTag = ANIM_TAG_SPARK_2, + .paletteTag = ANIM_TAG_SPARK_2, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AE1A0, +}; + +static const struct SpriteTemplate gUnknown_83E60A0 = +{ + .tileTag = ANIM_TAG_SPARK, + .paletteTag = ANIM_TAG_SPARK, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AE420, +}; + +const struct SpriteTemplate gUnknown_83E60B8 = +{ + .tileTag = ANIM_TAG_SPARK_H, + .paletteTag = ANIM_TAG_SPARK_H, + .oam = &gOamData_83AC9F8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AE470, +}; + +static const s8 gUnknown_83E60D0[][2] = +{ + { 58, -60}, + {-56, -36}, + { 8, -56}, + {-16, 56}, + { 58, -10}, + {-58, 10}, + { 48, -18}, + {-8, 56}, + { 16, -56}, + {-58, -42}, + { 58, 30}, + {-48, 40}, + { 12, -48}, + { 48, -12}, + {-56, 18}, + { 48, 48}, +}; + +static const union AnimCmd gUnknown_83E60F0[] = +{ + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6104[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6118[] = +{ + gUnknown_83E60F0, + gUnknown_83E6104, +}; + +static const struct SpriteTemplate gUnknown_83E6120 = +{ + .tileTag = ANIM_TAG_ELECTRIC_ORBS, + .paletteTag = ANIM_TAG_ELECTRIC_ORBS, + .oam = &gOamData_83AC9C8, + .anims = gUnknown_83E6118, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AffineAnimCmd gUnknown_83E6138[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 60), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(-0x4, -0x4, 0, 5), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5), + AFFINEANIMCMD_LOOP(10), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6178[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x4, -0x4, 0, 5), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 5), + AFFINEANIMCMD_JUMP(3), +}; + +static const union AffineAnimCmd gUnknown_83E61A8[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 30), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 30), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E61C8[] = +{ + gUnknown_83E6138, + gUnknown_83E6178, + gUnknown_83E61A8, +}; + +const struct SpriteTemplate gUnknown_83E61D4 = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACB60, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E61C8, + .callback = sub_80AE71C, +}; + +static const union AnimCmd gUnknown_83E61EC[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6200[] = +{ + gUnknown_83E61EC, +}; + +const struct SpriteTemplate gUnknown_83E6204 = +{ + .tileTag = ANIM_TAG_ELECTRICITY, + .paletteTag = ANIM_TAG_ELECTRICITY, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E6200, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AE774, +}; + +const struct SpriteTemplate gUnknown_83E621C = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACB60, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E61C8, + .callback = sub_80AE7DC, +}; + +static const union AnimCmd gUnknown_83E6234[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E623C[] = +{ + ANIMCMD_FRAME(2, 3), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6244[] = +{ + ANIMCMD_FRAME(4, 3), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E624C[] = +{ + ANIMCMD_FRAME(6, 3), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6254[] = +{ + gUnknown_83E6234, + gUnknown_83E623C, + gUnknown_83E6244, + gUnknown_83E624C, +}; + +static const union AffineAnimCmd gUnknown_83E6264[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6274[] = +{ + gUnknown_83E6264, +}; + +static const struct SpriteTemplate gUnknown_83E6278 = +{ + .tileTag = ANIM_TAG_SPARK, + .paletteTag = ANIM_TAG_SPARK, + .oam = &gOamData_83ACAC8, + .anims = gUnknown_83E6254, + .images = NULL, + .affineAnims = gUnknown_83E6274, + .callback = sub_80AEC34, +}; + +const struct SpriteTemplate gUnknown_83E6290 = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACB60, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E61C8, + .callback = sub_80AEC80, +}; + +static const struct SpriteTemplate gUnknown_83E62A8 = +{ + .tileTag = ANIM_TAG_SPARK, + .paletteTag = ANIM_TAG_SPARK, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AEF60, +}; + +static void sub_80ADBEC(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = sub_80ADC3C; +} + +static void sub_80ADC3C(struct Sprite *sprite) +{ + if (sprite->animEnded) + DestroyAnimSprite(sprite); +} + +static void sub_80ADC58(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->callback = sub_80ADC9C; +} + +static void sub_80ADC9C(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + DestroySpriteAndMatrix(sprite); +} + +static void sub_80ADCB8(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y -= gBattleAnimArgs[1]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteInCircleOverDuration; +} + +static void sub_80ADD4C(struct Sprite *sprite) +{ + u8 battler; + u32 matrixNum; + s16 sineVal; + + switch (gBattleAnimArgs[4]) + { + case 0: + battler = gBattleAnimAttacker; + break; + case 1: + default: + battler = gBattleAnimTarget; + break; + case 2: + if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + battler = gBattleAnimAttacker; + else + battler = BATTLE_PARTNER(gBattleAnimAttacker); + break; + case 3: + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + battler = BATTLE_PARTNER(gBattleAnimTarget); + else + battler = gBattleAnimTarget; + break; + } + if (gBattleAnimArgs[5] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET); + } + sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8; + sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8; + if (gBattleAnimArgs[6] & 1) + sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; + matrixNum = sprite->oam.matrixNum; + sineVal = gSineTable[gBattleAnimArgs[2]]; + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[gBattleAnimArgs[2] + 64]; + gOamMatrices[matrixNum].b = sineVal; + gOamMatrices[matrixNum].c = -sineVal; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->callback = sub_80B1D3C; +} + +static void sub_80ADEB0(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + InitAnimLinearTranslation(sprite); + sprite->data[5] = gBattleAnimArgs[2]; + sprite->data[6] = gBattleAnimArgs[5]; + sprite->data[7] = gBattleAnimArgs[4]; + sprite->oam.tileNum += gBattleAnimArgs[6] * 4; + sprite->callback = sub_80ADF38; + sprite->callback(sprite); +} + +static void sub_80ADF38(struct Sprite *sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->pos2.x += Sin(sprite->data[7], sprite->data[5]); + sprite->pos2.y += Cos(sprite->data[7], sprite->data[5]); + sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; + if(!(sprite->data[7] % 3)) + sprite->invisible ^= 1; + } + else + { + DestroyAnimSprite(sprite); + } +} + +static void sub_80ADFB0(struct Sprite *sprite) +{ + if (--sprite->data[5] == -1) + { + sprite->invisible ^= 1; + sprite->data[5] = sprite->data[4]; + } + if (sprite->data[3]-- <= 0) + DestroyAnimSprite(sprite); +} + +static void sub_80AE000(struct Sprite *sprite) +{ + if (IsContest() || GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[0]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80ADFB0; +} + +static void sub_80AE06C(struct Sprite *sprite) +{ + u8 battler; + + sprite->data[0] = gBattleAnimArgs[3]; + if (gBattleAnimArgs[7] & 0x8000) + battler = gBattleAnimTarget; + else + battler = gBattleAnimAttacker; + if (IsContest() || GetBattlerSide(battler) == B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1]; + sprite->data[4] = gBattleAnimArgs[7] & 0x7FFF; + sprite->data[5] = gBattleAnimArgs[2]; + sprite->data[6] = gBattleAnimArgs[5]; + sprite->data[7] = gBattleAnimArgs[4]; + sprite->oam.tileNum += gBattleAnimArgs[6] * 4; + sprite->callback = sub_80AE130; + sprite->callback(sprite); +} + +static void sub_80AE130(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[7], sprite->data[5]); + sprite->pos2.y = Cos(sprite->data[7], sprite->data[5]); + sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; + if (sprite->data[7] % sprite->data[4] == 0) + sprite->invisible ^= 1; + if (sprite->data[0]-- <= 0) + DestroyAnimSprite(sprite); +} + +static void sub_80AE1A0(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->oam.tileNum += gBattleAnimArgs[3] * 4; + if (gBattleAnimArgs[3] == 1) + sprite->oam.matrixNum = ST_OAM_HFLIP; + else if (gBattleAnimArgs[3] == 2) + sprite->oam.matrixNum = ST_OAM_VFLIP; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_80AE220(u8 taskId) +{ + gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0]; + gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].func = sub_80AE278; +} + +static void sub_80AE278(u8 taskId) +{ + u16 r8; + u16 r2; + s16 r12; + u8 spriteId = 0; + u8 r7 = 0; + u8 sp = gTasks[taskId].data[2]; + s16 x = gTasks[taskId].data[0]; + s16 y = gTasks[taskId].data[1]; + + if (!gTasks[taskId].data[2]) + { + r8 = 0; + r2 = 1; + r12 = 16; + } + else + { + r12 = 16; + r8 = 8; + r2 = 4; + } + switch (gTasks[taskId].data[10]) + { + case 0: + r12 *= 1; + spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2); + ++r7; + break; + case 2: + r12 *= 2; + r8 += r2; + spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2); + ++r7; + break; + case 4: + r12 *= 3; + r8 += r2 * 2; + spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2); + ++r7; + break; + case 6: + r12 *= 4; + r8 += r2 * 3; + spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2); + ++r7; + break; + case 8: + r12 *= 5; + spriteId = CreateSprite(&gUnknown_83E60A0, x, y + r12, 2); + ++r7; + break; + case 10: + DestroyAnimVisualTask(taskId); + return; + } + if (r7) + { + gSprites[spriteId].oam.tileNum += r8; + gSprites[spriteId].data[0] = sp; + gSprites[spriteId].callback(&gSprites[spriteId]); + } + ++gTasks[taskId].data[10]; +} + +static void sub_80AE420(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + sprite->oam.shape = ST_OAM_V_RECTANGLE; + sprite->oam.size = ST_OAM_SIZE_0; + } + else + { + sprite->oam.shape = ST_OAM_SQUARE; + sprite->oam.size = ST_OAM_SIZE_1; + } + if (++sprite->data[1] == 15) + DestroySprite(sprite); +} + +static void sub_80AE470(struct Sprite *sprite) +{ + u8 spriteId; + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + spriteId = CreateSprite(&gUnknown_83E60B8, sprite->pos1.x + 32, sprite->pos1.y, sprite->subpriority); + gSprites[spriteId].oam.tileNum += 8; + ++gAnimVisualTaskCount; + gSprites[spriteId].callback = sub_80AE4F4; + sprite->callback = sub_80AE4F4; +} + +static void sub_80AE4F4(struct Sprite *sprite) +{ + if (++sprite->data[0] == 3) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + } + if (++sprite->data[1] == 51) + DestroyAnimSprite(sprite); +} + +void sub_80AE540(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (!gBattleAnimArgs[0]) + { + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + task->data[6] = gBattleAnimArgs[1]; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 0; + task->data[10] = 0; + task->data[11] = gBattleAnimArgs[3]; + task->data[12] = 0; + task->data[13] = gBattleAnimArgs[2]; + task->func = sub_80AE5BC; +} + +static void sub_80AE5BC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (task->data[6]) + { + if (++task->data[12] > task->data[13]) + { + u8 spriteId; + + task->data[12] = 0; + spriteId = CreateSprite(&gUnknown_83E6120, task->data[14], task->data[15], 2); + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sprite->pos1.x += gUnknown_83E60D0[task->data[9]][0]; + sprite->pos1.y += gUnknown_83E60D0[task->data[9]][1]; + sprite->data[0] = 40 - task->data[8] * 5; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = task->data[14]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = task->data[15]; + sprite->data[5] = taskId; + InitAnimLinearTranslation(sprite); + StoreSpriteCallbackInData6(sprite, sub_80AE704); + sprite->callback = RunStoredCallbackWhenAnimEnds; + if (++task->data[9] > 15) + task->data[9] = 0; + if (++task->data[10] >= task->data[11]) + { + task->data[10] = 0; + if (task->data[8] <= 5) + ++task->data[8]; + } + ++task->data[7]; + --task->data[6]; + } + } + } + else if(task->data[7] == 0) + { + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80AE6D0(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + { + --gTasks[sprite->data[5]].data[7]; + DestroySprite(sprite); + } +} + +static void sub_80AE704(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, 1); + sprite->callback = sub_80AE6D0; +} + +static void sub_80AE71C(struct Sprite *sprite) +{ + if (!gBattleAnimArgs[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +static void sub_80AE774(struct Sprite *sprite) +{ + if (!gBattleAnimArgs[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + sprite->pos2.x = gBattleAnimArgs[1]; + sprite->pos2.y = gBattleAnimArgs[2]; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +static void sub_80AE7DC(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 1); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[6] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + sprite->data[7] = 16; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + sprite->data[7] *= -1; + sprite->callback = sub_80AE83C; +} + +static void sub_80AE83C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[1] > 40) + ++sprite->data[0]; + break; + case 1: + sprite->pos1.x += sprite->data[7]; + gSprites[sprite->data[6]].pos2.x += sprite->data[7]; + if ((u16)(sprite->pos1.x + 80) > 400) + DestroySpriteAndMatrix(sprite); + break; + } +} + +void sub_80AE8A0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + task->data[14] = -32; + task->data[13] = 2; + } + else + { + task->data[14] = 32; + task->data[13] = -2; + } + gSprites[task->data[15]].pos2.x = task->data[14]; + ++task->data[0]; + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + gSprites[task->data[15]].invisible ^= 1; + + if (task->data[14]) + { + task->data[14] += task->data[13]; + gSprites[task->data[15]].pos2.x = task->data[14]; + } + else + { + ++task->data[0]; + } + } + break; + case 2: + if (++task->data[1] > 1) + { + task->data[1] = 0; + gSprites[task->data[15]].invisible ^= 1; + if (++task->data[2] == 8) + ++task->data[0]; + } + break; + case 3: + gSprites[task->data[15]].invisible = FALSE; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80AEA10(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch(task->data[0]) + { + case 0: + task->data[1] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1; + switch (gBattleAnimArgs[0]) + { + case 0: + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[5] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + task->data[4] = (task->data[1] * 128) + 120; + break; + case 4: + task->data[3] = 120 - (task->data[1] * 128); + task->data[5] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - (task->data[1] * 32); + break; + default: + if ((gBattleAnimArgs[0] & 1) != 0) + { + task->data[3] = 256; + task->data[4] = -16; + } + else + { + task->data[3] = -16; + task->data[4] = 256; + } + if (task->data[1] == 1) + { + task->data[5] = 80 - gBattleAnimArgs[0] * 10; + } + else + { + u16 temp; + + task->data[5] = gBattleAnimArgs[0] * 10 + 40; + temp = task->data[3]; + task->data[3] = task->data[4]; + task->data[4] = temp; + } + } + if (task->data[3] < task->data[4]) + { + task->data[1] = 1; + task->data[6] = 0; + } + else + { + task->data[1] = -1; + task->data[6] = 3; + } + ++task->data[0]; + break; + case 1: + if (++task->data[2] > 0) + { + task->data[2] = 0; + if (sub_80AEB98(task, taskId) || sub_80AEB98(task, taskId)) + ++task->data[0]; + } + break; + case 2: + if (task->data[7] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static bool8 sub_80AEB98(struct Task *task, u8 taskId) +{ + u8 spriteId = CreateSprite(&gUnknown_83E6278, task->data[3], task->data[5], 35); + + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 7; + ++task->data[7]; + } + task->data[6] += task->data[1]; + if (task->data[6] < 0) + task->data[6] = 3; + if (task->data[6] > 3) + task->data[6] = 0; + task->data[3] += task->data[1] * 16; + if ((task->data[1] == 1 && task->data[3] >= task->data[4]) + || (task->data[1] == -1 && task->data[3] <= task->data[4])) + return TRUE; + else + return FALSE; +} + +static void sub_80AEC34(struct Sprite *sprite) +{ + if (++sprite->data[0] > 12) + { + --gTasks[sprite->data[6]].data[sprite->data[7]]; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +static void sub_80AEC80(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + StartSpriteAffineAnim(sprite, 2); + ++sprite->data[0]; + break; + case 1: + if (sprite->affineAnimEnded) + DestroySpriteAndMatrix(sprite); + break; + } +} + +void sub_80AECE0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + task->data[8] = 4; + task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[9] = (task->data[10] - task->data[6]) / 5; + task->data[4] = 7; + task->data[5] = -1; + task->data[11] = 12; + task->data[12] = BattleAnimAdjustPanning(task->data[11] - 76); + task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET); + task->data[14] = task->data[12]; + task->data[15] = (task->data[13] - task->data[12]) / 3; + ++task->data[0]; + break; + case 1: + if (++task->data[1] > 0) + { + task->data[1] = 0; + if (sub_80AEE74(task, taskId)) + { + if (task->data[2] == 5) + task->data[0] = 3; + else + ++task->data[0]; + } + } + if (task->data[11]) + --task->data[11]; + break; + case 2: + if (task->data[11]) + --task->data[11]; + if (++task->data[1] > 4) + { + task->data[1] = 0; + if (task->data[2] & 1) + { + task->data[7] = 4; + task->data[8] = 68; + task->data[4] = 0; + task->data[5] = 1; + } + else + { + task->data[7] = 68; + task->data[8] = 4; + task->data[4] = 7; + task->data[5] = -1; + } + if (task->data[11]) + task->data[0] = 4; + else + task->data[0] = 1; + } + break; + case 3: + if (task->data[3] == 0) + DestroyAnimVisualTask(taskId); + break; + case 4: + if (task->data[11]) + --task->data[11]; + else + task->data[0] = 1; + break; + } +} + +static bool8 sub_80AEE74(struct Task *task, u8 taskId) +{ + u8 spriteId = CreateSprite(&gUnknown_83E62A8, task->data[6], task->data[7], 35); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].oam.tileNum += task->data[4]; + task->data[4] += task->data[5]; + if (task->data[4] < 0) + task->data[4] = 7; + if (task->data[4] > 7) + task->data[4] = 0; + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 3; + ++task->data[3]; + } + if (task->data[4] == 0 && task->data[5] > 0) + { + task->data[14] += task->data[15]; + PlaySE12WithPanning(SE_W085, task->data[14]); + } + if ((task->data[5] < 0 && task->data[7] <= task->data[8]) + || (task->data[5] > 0 && task->data[7] >= task->data[8])) + { + ++task->data[2]; + task->data[6] += task->data[9]; + return TRUE; + } + else + { + task->data[7] += task->data[5] * 8; + return FALSE; + } +} + +static void sub_80AEF60(struct Sprite *sprite) +{ + if (++sprite->data[0] > 12) + { + --gTasks[sprite->data[6]].data[sprite->data[7]]; + DestroySprite(sprite); + } +} + +void sub_80AEFA0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32; + task->data[14] = task->data[15]; + while (task->data[14] > 16) + task->data[14] -= 32; + task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2; + ++task->data[0]; + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (sub_80AF058(task, taskId)) + ++task->data[0]; + } + break; + case 2: + if (task->data[10] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static bool8 sub_80AF058(struct Task *task, u8 taskId) +{ + u8 spriteId = CreateSprite(&gUnknown_83E5F38, task->data[13], task->data[14], task->data[12]); + + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].callback = sub_80AF0C8; + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 10; + ++task->data[10]; + } + if (task->data[14] >= task->data[15]) + return TRUE; + task->data[14] += 32; + return FALSE; +} + +static void sub_80AF0C8(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + --gTasks[sprite->data[6]].data[sprite->data[7]]; + DestroySprite(sprite); + } +} diff --git a/src/fighting.c b/src/fighting.c new file mode 100644 index 000000000..496f752ef --- /dev/null +++ b/src/fighting.c @@ -0,0 +1,971 @@ +#include "global.h" +#include "battle_anim.h" +#include "gpu_regs.h" +#include "random.h" +#include "task.h" +#include "trig.h" + +static void unc_080B08A0(struct Sprite *sprite); +static void sub_80B08DC(struct Sprite *sprite); +static void sub_80B0928(struct Sprite *sprite); +static void AnimBasicFistOrFoot(struct Sprite *sprite); +static void sub_80B09A4(struct Sprite *sprite); +static void sub_80B0B80(struct Sprite *sprite); +static void sub_80B0C28(struct Sprite *sprite); +static void AnimSpinningKickOrPunch(struct Sprite *sprite); +static void AnimStompFoot(struct Sprite *sprite); +static void sub_80B0DF0(struct Sprite *sprite); +static void sub_80B0E80(struct Sprite *sprite); +static void sub_80B0F68(struct Sprite *sprite); +static void sub_80B107C(struct Sprite *sprite); +static void sub_80B1188(struct Sprite *sprite); +static void sub_80B12E8(struct Sprite *sprite); +static void sub_80B13F8(struct Sprite *sprite); +static void sub_80B1484(struct Sprite *sprite); +static void sub_80B14F0(struct Sprite *sprite); +static void sub_80B0B2C(struct Sprite *sprite); +static void sub_80B0BD8(struct Sprite *sprite); +static void sub_80B0CB4(struct Sprite *sprite); +static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite); +static void AnimStompFootStep(struct Sprite *sprite); +static void AnimStompFootEnd(struct Sprite *sprite); +static void sub_80B0EF0(struct Sprite *sprite); +static void sub_80B1050(struct Sprite *sprite); +static void sub_80B111C(struct Sprite *sprite); +static void sub_80B11E4(struct Sprite *sprite); +static void sub_80B12A4(struct Sprite *sprite); + +const struct SpriteTemplate gUnknown_83E668C = +{ + .tileTag = ANIM_TAG_HUMANOID_FOOT, + .paletteTag = ANIM_TAG_HUMANOID_FOOT, + .oam = &gOamData_83AC9D8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = unc_080B08A0, +}; + +static const union AnimCmd gUnknown_83E66A4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66AC[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66B4[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66BC[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E66C4[] = +{ + ANIMCMD_FRAME(48, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E66CC[] = +{ + gUnknown_83E66A4, +}; + +static const union AnimCmd *const gUnknown_83E66D0[] = +{ + gUnknown_83E66AC, + gUnknown_83E66B4, +}; + +static const union AnimCmd *const gUnknown_83E66D8[] = +{ + gUnknown_83E66BC, + gUnknown_83E66C4, +}; + +const struct SpriteTemplate gUnknown_83E66E0 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B08DC, +}; + +const struct SpriteTemplate gUnknown_83E66F8 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0928, +}; + +const struct SpriteTemplate gFistFootSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBasicFistOrFoot, +}; + +const struct SpriteTemplate gUnknown_83E6728 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B09A4, +}; + +const struct SpriteTemplate gUnknown_83E6740 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66D8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0B80, +}; + +const struct SpriteTemplate gUnknown_83E6758 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66D0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0C28, +}; + +static const union AffineAnimCmd gUnknown_83E6770[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 20, 1), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E6788[] = +{ + gUnknown_83E6770, +}; + +const struct SpriteTemplate gUnknown_83E678C = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gUnknown_83E6788, + .callback = AnimSpinningKickOrPunch, +}; + +static const union AffineAnimCmd gUnknown_83E67A4[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(-0x4, -0x4, 20, 1), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E67BC[] = +{ + gUnknown_83E67A4, +}; + +const struct SpriteTemplate gMegaPunchKickSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gUnknown_83E67BC, + .callback = AnimSpinningKickOrPunch, +}; + +const struct SpriteTemplate gUnknown_83E67D8 = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66D0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimStompFoot, +}; + +const struct SpriteTemplate gUnknown_83E67F0 = +{ + .tileTag = ANIM_TAG_DUCK, + .paletteTag = ANIM_TAG_DUCK, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0DF0, +}; + +const struct SpriteTemplate gUnknown_83E6808 = +{ + .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, + .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0E80, +}; + +const struct SpriteTemplate gUnknown_83E6820 = +{ + .tileTag = ANIM_TAG_TORN_METAL, + .paletteTag = ANIM_TAG_TORN_METAL, + .oam = &gOamData_83AC9D8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B0F68, +}; + +static const union AffineAnimCmd gUnknown_83E6838[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 64), + AFFINEANIMCMD_FRAME(-0x6, -0x6, 0, 8), + AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 8), + AFFINEANIMCMD_JUMP(2), +}; + +static const union AffineAnimCmd *const gUnknown_83E6860[] = +{ + gUnknown_83E6838, +}; + +const struct SpriteTemplate gUnknown_83E6864 = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACBC0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6860, + .callback = sub_80B107C, +}; + +const struct SpriteTemplate gUnknown_83E687C = +{ + .tileTag = ANIM_TAG_FLAT_ROCK, + .paletteTag = ANIM_TAG_FLAT_ROCK, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1188, +}; + +const struct SpriteTemplate gUnknown_83E6894 = +{ + .tileTag = ANIM_TAG_METEOR, + .paletteTag = ANIM_TAG_METEOR, + .oam = &gOamData_83AC9E0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B12E8, +}; + +const struct SpriteTemplate gUnknown_83E68AC = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B13F8, +}; + +static const union AnimCmd gUnknown_83E68C4[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E68D4[] = +{ + ANIMCMD_FRAME(0, 4, .vFlip = TRUE), + ANIMCMD_FRAME(16, 4, .vFlip = TRUE), + ANIMCMD_FRAME(32, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E68E4[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E68F4[] = +{ + gUnknown_83E68C4, + gUnknown_83E68D4, + gUnknown_83E68E4, +}; + +const struct SpriteTemplate gUnknown_83E6900 = +{ + .tileTag = ANIM_TAG_PURPLE_SCRATCH, + .paletteTag = ANIM_TAG_PURPLE_SCRATCH, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E68F4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1484, +}; + +static const union AnimCmd gUnknown_83E6918[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(64, 6), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6924[] = +{ + ANIMCMD_FRAME(0, 6, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 6, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6930[] = +{ + ANIMCMD_FRAME(0, 6, .hFlip = TRUE), + ANIMCMD_FRAME(64, 6, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E693C[] = +{ + gUnknown_83E6918, + gUnknown_83E6924, + gUnknown_83E6930, +}; + +const struct SpriteTemplate gUnknown_83E6948 = +{ + .tileTag = ANIM_TAG_PURPLE_SWIPE, + .paletteTag = ANIM_TAG_PURPLE_SWIPE, + .oam = &gOamData_83AC9E0, + .anims = gUnknown_83E693C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1484, +}; + +static const union AffineAnimCmd gUnknown_83E6960[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_FRAME(-0x20, -0x20, 0, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6978[] = +{ + gUnknown_83E6960, +}; + +const struct SpriteTemplate gUnknown_83E697C = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E66CC, + .images = NULL, + .affineAnims = gUnknown_83E6978, + .callback = sub_80B14F0, +}; + +static void unc_080B08A0(struct Sprite *sprite) +{ + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = 15; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B08DC(struct Sprite *sprite) +{ + if (gBattleAnimArgs[7] == 1 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + StartSpriteAnim(sprite, gBattleAnimArgs[6]); + gBattleAnimArgs[6] = 0; + AnimSnoreZ(sprite); +} + +static void sub_80B0928(struct Sprite *sprite) +{ + if (IsContest()) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + sub_80B08DC(sprite); +} + +// Displays a basic fist or foot sprite for a given duration. +// Used by many fighting moves (and elemental "punch" moves). +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: ? (todo: related to initial pixel offsets) +// arg 4: anim num +static void AnimBasicFistOrFoot(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + if (gBattleAnimArgs[3] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B09A4(struct Sprite *sprite) +{ + u8 battler; + s16 xMod, yMod; + s16 x, y; + + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + if (gBattleAnimArgs[2] < 0) + gBattleAnimArgs[2] = Random() % 5; + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->pos1.x = GetBattlerSpriteCoord(battler, 2); + sprite->pos1.y = GetBattlerSpriteCoord(battler, 3); + xMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 2; + yMod = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; + x = Random() % xMod; + y = Random() % yMod; + if (Random() & 1) + x *= -1; + if (Random() & 1) + y *= -1; + if ((gBattlerPositions[battler] & BIT_SIDE) == B_SIDE_PLAYER) + y += 0xFFF0; + sprite->pos1.x += x; + sprite->pos1.y += y; + sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[7] = CreateSprite(&gBasicHitSplatSpriteTemplate, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1); + if (sprite->data[7] != 64) + { + StartSpriteAffineAnim(&gSprites[sprite->data[7]], 0); + gSprites[sprite->data[7]].callback = SpriteCallbackDummy; + } + sprite->callback = sub_80B0B2C; +} + +static void sub_80B0B2C(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (sprite->data[7] != 64) + { + FreeOamMatrix(gSprites[sprite->data[7]].oam.matrixNum); + DestroySprite(&gSprites[sprite->data[7]]); + } + DestroyAnimSprite(sprite); + } + else + { + --sprite->data[0]; + } +} + +static void sub_80B0B80(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = 30; + if (gBattleAnimArgs[2] == 0) + { + sprite->data[2] = sprite->pos1.x - 20; + } + else + { + sprite->data[2] = sprite->pos1.x + 20; + sprite->hFlip = 1; + } + sprite->data[4] = sprite->pos1.y - 20; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, sub_80B0BD8); +} + +static void sub_80B0BD8(struct Sprite *sprite) +{ + if (++sprite->data[5] == 11) + { + sprite->data[2] = sprite->pos1.x - sprite->pos2.x; + sprite->data[4] = sprite->pos1.y - sprite->pos2.y; + sprite->data[0] = 8; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + +static void sub_80B0C28(struct Sprite *sprite) +{ + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT) + gBattleAnimArgs[0] *= -1; + InitSpritePosToAnimTarget(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[4]; + sprite->data[7] = 0; + sprite->callback = sub_80B0CB4; +} + +static void sub_80B0CB4(struct Sprite *sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->pos2.y += Sin(sprite->data[7] >> 8, sprite->data[5]); + sprite->data[7] += sprite->data[6]; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Animates the spinning, shrinking kick or punch, which then +// reappears at full size. Used by moves such as MOVE_MEGA_PUNCH and MOVE_MEGA_KICK. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: anim num +// arg 3: spin duration +static void AnimSpinningKickOrPunch(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, AnimSpinningKickOrPunchFinish); +} + +static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 0); + sprite->affineAnimPaused = 1; + sprite->data[0] = 20; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Animates MOVE_STOMP's foot that slides downward. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: initial wait duration +static void AnimStompFoot(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = AnimStompFootStep; +} + +static void AnimStompFootStep(struct Sprite *sprite) +{ + if (--sprite->data[0] == -1) + { + sprite->data[0] = 6; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, AnimStompFootEnd); + } +} + +static void AnimStompFootEnd(struct Sprite *sprite) +{ + sprite->data[0] = 15; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B0DF0(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + ++sprite->data[0]; + } + else + { + sprite->data[4] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]); + sprite->data[3] = (sprite->data[3] + 3) & 0xFF; + if (sprite->data[3] > 100) + sprite->invisible = sprite->data[3] % 2; + if (sprite->data[3] > 120) + DestroyAnimSprite(sprite); + } +} + +static void sub_80B0E80(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + } + sprite->pos1.x += gBattleAnimArgs[1]; + sprite->pos1.y += gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = 0; + sprite->callback = sub_80B0EF0; +} + +static void sub_80B0EF0(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (--sprite->data[1] == 0) + { + if (sprite->data[2] == 0) + DestroyAnimSprite(sprite); + else + ++sprite->data[0]; + } + break; + case 1: + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + ++sprite->data[3]; + if (sprite->data[3] & 1) + sprite->pos2.x = 2; + else + sprite->pos2.x = -2; + } + + if (--sprite->data[2] == 0) + DestroyAnimSprite(sprite); + break; + } +} + +static void sub_80B0F68(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[2]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[3]; + } + sprite->oam.tileNum += gBattleAnimArgs[1] * 16; + sprite->data[0] = 0; + switch (gBattleAnimArgs[1]) + { + case 0: + sprite->data[6] = -3; + sprite->data[7] = -3; + break; + case 1: + sprite->data[6] = 3; + sprite->data[7] = -3; + break; + case 2: + sprite->data[6] = -3; + sprite->data[7] = 3; + break; + case 3: + sprite->data[6] = 3; + sprite->data[7] = 3; + break; + default: + DestroyAnimSprite(sprite); + return; + } + sprite->callback = sub_80B1050; +} + +static void sub_80B1050(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->data[6]; + sprite->pos1.y += sprite->data[7]; + if (++sprite->data[0] > 40) + DestroyAnimSprite(sprite); +} + +static void sub_80B107C(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); + sprite->data[7] = gBattleAnimTarget; + } + else + { + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + sprite->data[7] = gBattleAnimAttacker; + } + sprite->data[0] = 0; + sprite->data[1] = 12; + sprite->data[2] = 8; + sprite->callback = sub_80B111C; +} + +static void sub_80B111C(struct Sprite *sprite) +{ + if (++sprite->data[0] == 180) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + sprite->data[0] = 16; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(sprite->data[7], 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3); + InitAnimLinearTranslation(sprite); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = sub_807563C; + } +} + +static void sub_80B1188(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = 120; + sprite->data[0] = gBattleAnimArgs[3]; + StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8)); + sprite->data[6] = gBattleAnimArgs[1]; + sprite->oam.tileNum += gBattleAnimArgs[2] * 4; + sprite->callback = sub_80B11E4; +} + +static void sub_80B11E4(struct Sprite *sprite) +{ + void *var0; + + if (sprite->data[0] != 0) + { + var0 = LoadPointerFromVars(sprite->data[4], sprite->data[5]); + var0 -= sprite->data[6]; + StorePointerInVars(&sprite->data[4], &sprite->data[5], var0); + var0 = (void *)(((intptr_t)var0) >> 8); + sprite->pos1.y = (intptr_t)var0; + if (sprite->pos1.y < -8) + DestroyAnimSprite(sprite); + else + --sprite->data[0]; + } + else + { + s16 pos0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + s16 pos1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + s16 pos2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + s16 pos3 = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + + sprite->data[0] = pos2 - pos0; + sprite->data[1] = pos3 - pos1; + sprite->data[2] = sprite->pos1.x << 4; + sprite->data[3] = sprite->pos1.y << 4; + sprite->callback = sub_80B12A4; + } +} + +static void sub_80B12A4(struct Sprite *sprite) +{ + u16 edgeX; + + sprite->data[2] += sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->pos1.x = sprite->data[2] >> 4; + sprite->pos1.y = sprite->data[3] >> 4; + edgeX = sprite->pos1.x + 8; + if (edgeX > 256 || sprite->pos1.y < -8 || sprite->pos1.y > 120) + DestroyAnimSprite(sprite); +} + +static void sub_80B12E8(struct Sprite *sprite) +{ + u8 battler; + + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3); + battler = gBattleAnimTarget; + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker); + } + else + { + battler = gBattleAnimAttacker; + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + } + if (IsContest()) + sprite->oam.matrixNum |= ST_OAM_HFLIP; + else if (GetBattlerSide(battler) == B_SIDE_PLAYER) + sprite->oam.matrixNum |= (ST_OAM_HFLIP | ST_OAM_VFLIP); + sprite->data[0] = 16; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(battler, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(battler, 3); + InitAnimLinearTranslation(sprite); + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = sub_807563C; +} + +static void sub_80B13D4(struct Sprite *sprite) +{ + if (sprite->data[0] == sprite->data[4]) + DestroyAnimSprite(sprite); + ++sprite->data[0]; +} + +static void sub_80B13F8(struct Sprite *sprite) +{ + u8 turn; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[3] = gBattleAnimArgs[1]; + sprite->data[4] = gBattleAnimArgs[2]; + turn = gAnimMoveTurn; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + ++turn; + if (turn & 1) + { + sprite->data[2] = -sprite->data[2]; + ++sprite->data[1]; + } + StartSpriteAnim(sprite, sprite->data[1]); + sprite->pos2.x = sprite->data[2]; + sprite->pos2.y = sprite->data[3]; + sprite->callback = sub_80B13D4; +} + +static void sub_80B1484(struct Sprite *sprite) +{ + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 0); + else + InitSpritePosToAnimTarget(sprite, FALSE); + if (IsContest()) + StartSpriteAnim(sprite, 2); + else if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + StartSpriteAnim(sprite, 1); + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B14F0(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + sprite->data[1] = (sprite->data[1] + 40) & 0xFF; + sprite->pos2.x = Sin(sprite->data[1], 2); + if (++sprite->data[0] > 40) + DestroyAnimSprite(sprite); + } +} + +void sub_80B1530(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sub_8075458(0); + task->data[8] = gBattleAnimArgs[0]; + ++task->data[0]; + break; + case 1: + if (--task->data[8] == -1) + ++task->data[0]; + break; + case 2: + default: + task->data[9] += 1280; + break; + } + task->data[10] += 2816; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + gBattle_BG3_X += task->data[9] >> 8; + else + gBattle_BG3_X -= task->data[9] >> 8; + gBattle_BG3_Y += task->data[10] >> 8; + task->data[9] &= 0xFF; + task->data[10] &= 0xFF; + if (gBattleAnimArgs[7] == -1) + { + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + sub_8075458(1); + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/fire.c b/src/fire.c new file mode 100644 index 000000000..014413f5b --- /dev/null +++ b/src/fire.c @@ -0,0 +1,1193 @@ +#include "global.h" +#include "battle_anim.h" +#include "sound.h" +#include "util.h" +#include "task.h" +#include "trig.h" +#include "constants/songs.h" + +static void sub_80AC90C(struct Sprite *sprite); +static void sub_80AC94C(struct Sprite *sprite); +static void sub_80ACA00(struct Sprite *sprite); +static void sub_80AC990(struct Sprite *sprite); +static void sub_80ACAA8(struct Sprite *sprite); +static void sub_80ACBB0(struct Sprite *sprite); +static void AnimEmberFlare(struct Sprite *sprite); +static void sub_80ACC44(struct Sprite *sprite); +static void AnimFireRing(struct Sprite *sprite); +static void AnimFireCross(struct Sprite *sprite); +static void sub_80ACDE8(struct Sprite *sprite); +static void sub_80AD330(struct Sprite *sprite); +static void sub_80AD454(struct Sprite *sprite); +static void sub_80AD540(struct Sprite *sprite); +static void sub_80AD6F4(struct Sprite *sprite); +static void sub_80ACA6C(struct Sprite *sprite); +static void sub_80ACB1C(struct Sprite *sprite); +static void AnimFireRing_Step1(struct Sprite *sprite); +static void AnimFireRing_Step2(struct Sprite *sprite); +static void AnimFireRing_Step3(struct Sprite *sprite); +static void UpdateFireRingCircleOffset(struct Sprite *sprite); +static void sub_80ACE28(struct Sprite *sprite); +static void sub_80ACE50(struct Sprite *sprite); +static void sub_80ACF14(u8 taskId); +static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3); +static u16 sub_80AD374(u8 spriteId); +static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y); +static void sub_80AD3E4(struct Sprite *sprite); +static void sub_80AD4A8(struct Sprite *sprite); +static void sub_80AD690(struct Sprite *sprite); +static void sub_80AD870(u8 taskId); + +static const union AnimCmd gUnknown_83E5BB8[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gUnknown_83E5BC8[] = +{ + ANIMCMD_FRAME(16, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E5BD8[] = +{ + gUnknown_83E5BB8, + gUnknown_83E5BC8, +}; + +const struct SpriteTemplate gUnknown_83E5BE0 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5BD8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AC90C, +}; + +const struct SpriteTemplate gUnknown_83E5BF8 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5BD8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AC94C, +}; + +static const union AnimCmd gUnknown_83E5C10[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(80, 3), + ANIMCMD_FRAME(96, 3), + ANIMCMD_FRAME(112, 3), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E5C34[] = +{ + gUnknown_83E5C10, +}; + +static const union AnimCmd gUnknown_83E5C38[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E5C50[] = +{ + gUnknown_83E5C38, +}; + +static const union AffineAnimCmd gUnknown_83E5C54[] = +{ + AFFINEANIMCMD_FRAME(0x32, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x20, 0x0, 0, 7), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E5C6C[] = +{ + gUnknown_83E5C54, +}; + +const struct SpriteTemplate gUnknown_83E5C70 = +{ + .tileTag = ANIM_TAG_FIRE, + .paletteTag = ANIM_TAG_FIRE, + .oam = &gOamData_83ACA38, + .anims = gUnknown_83E5C34, + .images = NULL, + .affineAnims = gUnknown_83E5C6C, + .callback = sub_80ACA00, +}; + +const struct SpriteTemplate gUnknown_83E5C88 = +{ + .tileTag = ANIM_TAG_FIRE, + .paletteTag = ANIM_TAG_FIRE, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5C34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80ACA00, +}; + +const struct SpriteTemplate gUnknown_83E5CA0 = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5C50, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AC990, +}; + +const struct SpriteTemplate gUnknown_83E5CB8 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5C50, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AC990, +}; + +static const union AnimCmd gUnknown_83E5CD0[] = +{ + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 6), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E5CE0[] = +{ + gUnknown_83E5CD0, +}; + +const struct SpriteTemplate gUnknown_83E5CE4 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5CE0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80ACAA8, +}; + +static const union AffineAnimCmd gUnknown_83E5CFC[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), + AFFINEANIMCMD_FRAME(0x2, 0x2, 10, 1), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E5D14[] = +{ + gUnknown_83E5CFC, +}; + +const struct SpriteTemplate gUnknown_83E5D18 = +{ + .tileTag = ANIM_TAG_SUNLIGHT, + .paletteTag = ANIM_TAG_SUNLIGHT, + .oam = &gOamData_83ACB58, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E5D14, + .callback = sub_80ACBB0, +}; + +static const union AnimCmd gUnknown_83E5D30[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gUnknown_83E5D48[] = +{ + gUnknown_83E5D30, +}; + +const struct SpriteTemplate gEmberSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +const struct SpriteTemplate gEmberFlareSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5D48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimEmberFlare, +}; + +const struct SpriteTemplate gUnknown_83E5D7C = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5D48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80ACC44, +}; + +const struct SpriteTemplate gUnknown_83E5D94 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5D48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireRing, +}; + +static const union AnimCmd gUnknown_83E5DAC[] = +{ + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 6), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E5DB8[] = +{ + gUnknown_83E5DAC, +}; + +static const union AffineAnimCmd gUnknown_83E5DBC[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E5DCC[] = +{ + AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E5DDC[] = +{ + gUnknown_83E5DBC, + gUnknown_83E5DCC, +}; + +const struct SpriteTemplate gUnknown_83E5DE4 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5DB8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFireCross, +}; + +const struct SpriteTemplate gUnknown_83E5DFC = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5D48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80ACDE8, +}; + +const struct SpriteTemplate gUnknown_83E5E14 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5D48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8077350, +}; + +static const struct SpriteTemplate gUnknown_83E5E2C = +{ + .tileTag = ANIM_TAG_WARM_ROCK, + .paletteTag = ANIM_TAG_WARM_ROCK, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AD330, +}; + +static const s16 sHeatedRockCoords[][2] = +{ + {-2, -5}, + {-1, -1}, + { 3, -6}, + { 4, -2}, + { 2, -8}, + {-5, -5}, + { 4, -7}, +}; + +const struct SpriteTemplate gUnknown_83E5E60 = +{ + .tileTag = ANIM_TAG_WARM_ROCK, + .paletteTag = ANIM_TAG_WARM_ROCK, + .oam = &gOamData_83AC9D8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AD454, +}; + +static const union AnimCmd gUnknown_83E5E78[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gUnknown_83E5E8C[] = +{ + ANIMCMD_FRAME(16, 5), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E5E94[] = +{ + ANIMCMD_FRAME(20, 5), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E5E9C[] = +{ + ANIMCMD_FRAME(20, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E5EA4[] = +{ + gUnknown_83E5E78, + gUnknown_83E5E8C, + gUnknown_83E5E94, + gUnknown_83E5E9C, +}; + +const struct SpriteTemplate gUnknown_83E5EB4 = +{ + .tileTag = ANIM_TAG_WISP_ORB, + .paletteTag = ANIM_TAG_WISP_ORB, + .oam = &gOamData_83AC9D0, + .anims = gUnknown_83E5EA4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AD540, +}; + +static const union AnimCmd gUnknown_83E5ECC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E5EE0[] = +{ + gUnknown_83E5ECC, +}; + +const struct SpriteTemplate gUnknown_83E5EE4 = +{ + .tileTag = ANIM_TAG_WISP_FIRE, + .paletteTag = ANIM_TAG_WISP_FIRE, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5EE0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AD6F4, +}; + +static const s8 gUnknown_83E5EFC[16] = +{ + -1, -1, 0, 1, 1, 0, 0, -1, -1, 1, 1, 0, 0, -1, 0, 1, +}; + +static const s8 gUnknown_83E5F0C[16] = +{ + -1, 0, 1, 0, -1, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, 1, +}; + +static void sub_80AC90C(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 0x3C; + sprite->data[2] = 0x9; + sprite->data[3] = 0x1E; + sprite->data[4] = 0xFE00; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback(sprite); +} + +static void sub_80AC94C(struct Sprite *sprite) +{ + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->callback = TranslateSpriteLinearFixedPoint; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80AC990(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] = -gBattleAnimArgs[4]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[4]; + } + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80ACA6C; +} + +static void sub_80ACA00(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[4]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] = -gBattleAnimArgs[4]; + } + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80ACA6C; +} + +static void sub_80ACA6C(struct Sprite *sprite) +{ + if (++sprite->data[0] < sprite->data[4]) + { + sprite->pos2.x += sprite->data[2]; + sprite->pos2.y += sprite->data[3]; + } + if (sprite->data[0] == sprite->data[1]) + DestroySpriteAndMatrix(sprite); +} + +static void sub_80ACAA8(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->subpriority = 8; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[6]; + sprite->data[5] = 0; + sprite->callback = sub_80ACB1C; +} + +static void sub_80ACB1C(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + if(sprite->data[5] > 10000) + sprite->subpriority = 1; + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); + sprite->data[0] += sprite->data[2]; + sprite->data[5] += sprite->data[4]; + if (sprite->data[0] > 255) + sprite->data[0] -= 256; + else if (sprite->data[0] < 0) + sprite->data[0] += 256; + --sprite->data[3]; + } + else + { + DestroySpriteAndMatrix(sprite); + } +} + +//sunlight +static void sub_80ACBB0(struct Sprite *sprite) +{ + sprite->pos1.x = 0; + sprite->pos1.y = 0; + sprite->data[0] = 60; + sprite->data[2] = 140; + sprite->data[4] = 80; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +//fire 2 + +// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide +// horizontally a bit. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +// arg 5: ? (TODO: something related to which mon the pixel offsets are based on) +// arg 6: ? (TODO: something related to which mon the pixel offsets are based on) +static void AnimEmberFlare(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget) + && (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT) + || gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->callback = AnimSnoreZ; + sprite->callback(sprite); +} + +static void sub_80ACC44(struct Sprite *sprite) +{ + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->callback = AnimSnoreZ; +} + +// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST +// animation. The fire sprite first moves in a circle around the mon, +// and then it is translated towards the target mon, while still rotating. +// Lastly, it moves in a circle around the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: initial wave offset +//void AnimFireRing(struct Sprite *sprite) +static void AnimFireRing(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + sprite->data[7] = gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->callback = AnimFireRing_Step1; +} + +static void AnimFireRing_Step1(struct Sprite *sprite) +{ + UpdateFireRingCircleOffset(sprite); + + if (++sprite->data[0] == 0x12) + { + sprite->data[0] = 0x19; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + InitAnimLinearTranslation(sprite); + sprite->callback = AnimFireRing_Step2; + } +} + +static void AnimFireRing_Step2(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + { + sprite->data[0] = 0; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->pos2.x = sprite->pos2.y = 0; + sprite->callback = AnimFireRing_Step3; + sprite->callback(sprite); + } + else + { + sprite->pos2.x += Sin(sprite->data[7], 28); + sprite->pos2.y += Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; + } +} + +static void AnimFireRing_Step3(struct Sprite *sprite) +{ + UpdateFireRingCircleOffset(sprite); + if (++sprite->data[0] == 0x1F) + DestroyAnimSprite(sprite); +} + +static void UpdateFireRingCircleOffset(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[7], 28); + sprite->pos2.y = Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; +} + +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: x delta +// arg 4: y delta +// AnimFireCross(struct Sprite *sprite) +static void AnimFireCross(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateSpriteLinear; +} + +static void sub_80ACDE8(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->invisible = TRUE; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, sub_80ACE28); +} + +static void sub_80ACE28(struct Sprite *sprite) +{ + sprite->invisible = FALSE; + sprite->data[0] = sprite->data[1]; + sprite->data[1] = 0; + sprite->callback = sub_80ACE50; + sprite->callback(sprite); +} + +static void sub_80ACE50(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8); + sprite->data[1] = (sprite->data[1] + 10) & 0xFF; + sprite->data[2] += 0xD0; + if (--sprite->data[0] == -1) + DestroyAnimSprite(sprite); +} + +void sub_80ACEA4(u8 taskId) // initialize animation task for Move_ERUPTION? +{ + struct Task *task = &gTasks[taskId]; + + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = gSprites[task->data[15]].pos1.y; + task->data[5] = GetBattlerSide(gBattleAnimAttacker); + task->data[6] = 0; + PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL); + task->func = sub_80ACF14; +} + +static void sub_80ACF14(u8 taskId) // animate Move_ERUPTION? +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sub_80765D4(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20); + ++task->data[0]; + // fall through + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (++task->data[2] & 0x1) + gSprites[task->data[15]].pos2.x = 3; + else + gSprites[task->data[15]].pos2.x = -3; + } + if (task->data[5]) + { + if (++task->data[3] > 4) + { + task->data[3] = 0; + ++gSprites[task->data[15]].pos1.y; + } + } + if(!sub_8076640(task)) + { + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + gSprites[task->data[15]].pos2.x = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + ++task->data[0]; + } + break; + case 2: + if (++task->data[1] > 4) + { + if (task->data[5]) + sub_80765D4(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6); + else + sub_80765D4(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6); + task->data[1] = 0; + ++task->data[0]; + } + break; + case 3: + if (!sub_8076640(task)) + { + sub_80AD1F8(task->data[15], taskId, 6); + ++task->data[0]; + } + break; + case 4: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (++task->data[2] & 1) + gSprites[task->data[15]].pos2.y += 3; + else + gSprites[task->data[15]].pos2.y -= 3; + } + if (++task->data[3] > 0x18) + { + if (task->data[5]) + sub_80765D4(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8); + else + sub_80765D4(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8); + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.y -= 3; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + ++task->data[0]; + } + break; + case 5: + if (task->data[5]) + --gSprites[task->data[15]].pos1.y; + if (!sub_8076640(task)) + { + gSprites[task->data[15]].pos1.y = task->data[4]; + ResetSpriteRotScale(task->data[15]); + + task->data[2] = 0; + ++task->data[0]; + } + break; + case 6: + if (!task->data[6]) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80AD1F8(u8 spriteId, u8 taskId, u8 a3) +{ + u16 i, j; + s8 sign; + u16 y = sub_80AD374(spriteId); + u16 x = gSprites[spriteId].pos1.x; + + if(GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + x -= 0xC; + sign = 1; + } + else + { + x += 0x10; + sign = -1; + } + for (i = 0, j = 0; i <= 6; ++i) + { + u8 spriteId = CreateSprite(&gUnknown_83E5E2C, x, y, 2); + + if (spriteId != 0x40) + { + gSprites[spriteId].oam.tileNum += j * 4 + 0x40; + if (++j >= 5) + j = 0; + sub_80AD3C8(&gSprites[spriteId], sHeatedRockCoords[i][0] * sign, sHeatedRockCoords[i][1]); + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = a3; + ++gTasks[taskId].data[a3]; + } + } +} + +static void sub_80AD330(struct Sprite *sprite) +{ + sub_80AD3E4(sprite); + if (sprite->invisible) + { + --gTasks[sprite->data[6]].data[sprite->data[7]]; + DestroySprite(sprite); + } +} + +static u16 sub_80AD374(u8 spriteId) +{ + u16 var1 = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y + gSprites[spriteId].centerToCornerVecY; + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + var1 = ((var1 << 16) + 0x4A0000) >> 16; + else + var1 = ((var1 << 16) + 0x2C0000) >> 16; + return var1; +} + +static void sub_80AD3C8(struct Sprite *sprite, s16 x, s16 y) +{ + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = (u16)sprite->pos1.x * 8; + sprite->data[3] = (u16)sprite->pos1.y * 8; + sprite->data[4] = x * 8; + sprite->data[5] = y * 8; +} + +static void sub_80AD3E4(struct Sprite *sprite) +{ + s32 var1; + + if (++sprite->data[0] > 2) + { + sprite->data[0] = 0; + ++sprite->data[1]; + var1 = (u16)sprite->data[1] * (u16)sprite->data[1]; + sprite->data[3] += var1; + } + sprite->data[2] += sprite->data[4]; + sprite->pos1.x = sprite->data[2] >> 3; + sprite->data[3] += sprite->data[5]; + sprite->pos1.y = sprite->data[3] >> 3; + if (sprite->pos1.x < -8 || sprite->pos1.x > 0xf8 || sprite->pos1.y < -8 || sprite->pos1.y > 120) + sprite->invisible = TRUE; +} + +static void sub_80AD454(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; + sprite->oam.tileNum += gBattleAnimArgs[4] * 16; + sprite->callback = sub_80AD4A8; +} + +static void sub_80AD4A8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (sprite->data[6] != 0) + { + --sprite->data[6]; + return; + } + ++sprite->data[0]; + // fall through + case 1: + sprite->pos1.y += 8; + if (sprite->pos1.y >= sprite->data[7]) + { + sprite->pos1.y = sprite->data[7]; + ++sprite->data[0]; + } + break; + case 2: + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + if ((++sprite->data[2] & 1) != 0) + sprite->pos2.y = -3; + else + sprite->pos2.y = 3; + } + if (++sprite->data[3] > 16) + DestroyAnimSprite(sprite); + break; + } +} + +//wisp orb +static void sub_80AD540(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + InitSpritePosToAnimAttacker(sprite, 0); + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->data[7] = gBattleAnimArgs[2]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->data[4] = 4; + else + sprite->data[4] = -4; + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + ++sprite->data[0]; + break; + case 1: + sprite->data[1] += 192; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos2.y = -(sprite->data[1] >> 8); + else + sprite->pos2.y = sprite->data[1] >> 8; + sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]); + sprite->data[2] = (sprite->data[2] + 4) & 0xFF; + if (++sprite->data[3] == 1) + { + sprite->data[3] = 0; + ++sprite->data[0]; + } + break; + case 2: + sprite->pos2.x = Sin(sprite->data[2], sprite->data[4]); + sprite->data[2] = (sprite->data[2] + 4) & 0xFF; + if (++sprite->data[3] == 31) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = sprite->pos2.y = 0; + sprite->data[0] = 256; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sub_8075678(sprite); + sprite->callback = sub_80AD690; + } + break; + } +} + +static void sub_80AD690(struct Sprite *sprite) +{ + s16 initialData5, newData5; + + if (!AnimTranslateLinear(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], 16); + initialData5 = sprite->data[5]; + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + newData5 = sprite->data[5]; + if ((initialData5 == 0 || initialData5 > 196) && newData5 > 0 && sprite->data[7] == 0) + PlaySE12WithPanning(SE_W172, gUnknown_2037F24); + } + else + { + DestroyAnimSprite(sprite); + } +} + +//wisp fire +static void sub_80AD6F4(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + sprite->data[1] = gBattleAnimArgs[0]; + ++sprite->data[0]; + } + sprite->data[3] += 0xC0 * 2; + sprite->data[4] += 0xA0; + sprite->pos2.x = Sin(sprite->data[1], sprite->data[3] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[4] >> 8); + sprite->data[1] = (sprite->data[1] + 7) & 0xFF; + if (!IsContest()) + { + if (sprite->data[1] < 64 || sprite->data[1] > 195) + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + else + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1; + } + else + { + if (sprite->data[1] < 64 || sprite->data[1] > 195) + sprite->subpriority = 0x1D; + else + sprite->subpriority = 0x1F; + } + if (++sprite->data[2] > 0x14) + sprite->invisible ^= 1; + if (sprite->data[2] == 0x1E) + DestroyAnimSprite(sprite); +} + +void sub_80AD800(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[12] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1; + task->data[13] = IsBattlerSpriteVisible(gBattleAnimTarget ^ BIT_FLANK) + 1; + task->data[14] = GetAnimBattlerSpriteId(ANIM_TARGET); + task->data[15] = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER); + task->func = sub_80AD870; +} + +static void sub_80AD870(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] += task->data[12] * 2; + if (++task->data[1] >= 2) + { + task->data[1] = 0; + ++task->data[2]; + if (task->data[2] & 1) + task->data[11] = 2; + else + task->data[11] = -2; + } + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; + if (++task->data[9] == 16) + { + task->data[9] = 0; + ++task->data[0]; + } + break; + case 1: + if (++task->data[1] >= 5) + { + task->data[1] = 0; + ++task->data[2]; + if (task->data[2] & 1) + task->data[11] = 2; + else + task->data[11] = -2; + } + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; + if (++task->data[9] == 96) + { + task->data[9] = 0; + ++task->data[0]; + } + break; + case 2: + task->data[10] -= task->data[12] * 2; + if (++task->data[1] >= 2) + { + task->data[1] = 0; + ++task->data[2]; + if (task->data[2] & 1) + task->data[11] = 2; + else + task->data[11] = -2; + } + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; + if (++task->data[9] == 16) + ++task->data[0]; + break; + case 3: + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + gSprites[task->data[task->data[3] + 14]].pos2.x = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +// Used to add a color mask to the battle interface / HUD in Heat Wave. +// arg 0: opacity +// arg 1: color code +void AnimTask_BlendBackground(u8 taskId) +{ + struct BattleAnimBgData animBg; + + sub_80752A0(&animBg); + BlendPalette(animBg.paletteId * 16, 16, gBattleAnimArgs[0], gBattleAnimArgs[1]); + DestroyAnimVisualTask(taskId); +} + +void sub_80ADAD8(u8 taskId) +{ + s8 unk; + u8 spriteId; + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[4] = gBattleAnimArgs[3]; + } + ++gTasks[taskId].data[0]; + spriteId = gBattlerSpriteIds[gBattleAnimTarget]; + if (!gTasks[taskId].data[4]) + unk = gUnknown_83E5EFC[gTasks[taskId].data[0] % 10]; + else + unk = gUnknown_83E5F0C[gTasks[taskId].data[0] % 10]; + if (gTasks[taskId].data[3] == 1) + gSprites[spriteId].pos2.y = gBattleAnimArgs[1] * unk < 0 ? -(gBattleAnimArgs[1] * unk) : gBattleAnimArgs[1] * unk; + else + gSprites[spriteId].pos2.x = gBattleAnimArgs[1] * unk; + if (gTasks[taskId].data[0] == gTasks[taskId].data[1]) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } +} diff --git a/src/flying.c b/src/flying.c index 8c3ccb52a..59378c2f1 100644 --- a/src/flying.c +++ b/src/flying.c @@ -98,8 +98,8 @@ static const union AffineAnimCmd gUnknown_83E6B64[] = { AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), - AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), - AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 5), + AFFINEANIMCMD_FRAME(-0x10, 0x20, 0, 10), AFFINEANIMCMD_END, }; @@ -232,9 +232,9 @@ static const union AffineAnimCmd gUnknown_83E6C9C[] = { AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), - AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), - AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7), - AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5), + AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 5), + AFFINEANIMCMD_FRAME(-0x14, 0x0, 0, 7), + AFFINEANIMCMD_FRAME(-0x14, -0x14, 0, 5), AFFINEANIMCMD_END, }; @@ -280,8 +280,8 @@ static const union AffineAnimCmd gUnknown_83E6D14[] = { AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), - AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), - AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 5), + AFFINEANIMCMD_FRAME(-0x10, 0x20, 0, 10), AFFINEANIMCMD_END, }; @@ -306,7 +306,7 @@ static const union AffineAnimCmd gUnknown_83E6D58[] = { AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12), - AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11), + AFFINEANIMCMD_FRAME(0x0, -0x20, 0, 11), AFFINEANIMCMD_END, }; @@ -995,8 +995,8 @@ static void sub_80B2780(struct Sprite *sprite) InitSpritePosToAnimAttacker(sprite, 0); else InitSpritePosToAnimTarget(sprite, FALSE); - if ((!gBattleAnimArgs[2] && !GetBattlerSide(gBattleAnimAttacker)) - || (gBattleAnimArgs[2] == 1 && !GetBattlerSide(gBattleAnimTarget))) + if ((!gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + || (gBattleAnimArgs[2] == 1 && GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)) sprite->pos1.x += 8; SeekSpriteAnim(sprite, gBattleAnimArgs[4]); sprite->pos1.x -= 32; @@ -1048,7 +1048,7 @@ static void sub_80B2914(struct Sprite *sprite) { case 0: InitSpritePosToAnimAttacker(sprite, 1); - gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE; + gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE; ++sprite->data[0]; break; case 1: @@ -1076,7 +1076,7 @@ static void sub_80B2974(struct Sprite *sprite) sprite->pos2.y -= 10; if (sprite->pos1.y + sprite->pos2.y < -32) { - gSprites[GetAnimBattlerSpriteId(0)].invisible = FALSE; + gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = FALSE; DestroyAnimSprite(sprite); } break; @@ -1089,7 +1089,7 @@ static void sub_80B2A08(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; sprite->callback = sub_80B2A50; - gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE; + gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE; } static void sub_80B2A50(struct Sprite *sprite) @@ -1275,13 +1275,13 @@ static void sub_80B2E64(u8 taskId) { if (gBattleAnimArgs[0] == 0) { - u8 spriteId = GetAnimBattlerSpriteId(0); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = TRUE; } else { - u8 spriteId = GetAnimBattlerSpriteId(0); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = FALSE; } diff --git a/src/ghost.c b/src/ghost.c index fbf452af6..30430309e 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -50,7 +50,7 @@ static void sub_80B71B0(struct Sprite *sprite); static const union AffineAnimCmd gUnknown_83E75A8[] = { AFFINEANIMCMD_FRAME(0x1E, 0x1E, 10, 5), - AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 10, 5), + AFFINEANIMCMD_FRAME(-0x1E, -0x1E, 10, 5), AFFINEANIMCMD_JUMP(0), }; @@ -342,7 +342,7 @@ void sub_80B54E8(u8 taskId) SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); - spriteId = GetAnimBattlerSpriteId(0); + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); SetSpriteRotScale(spriteId, 128, 128, 0); gSprites[spriteId].invisible = FALSE; @@ -377,7 +377,7 @@ static void sub_80B55C8(u8 taskId) gTasks[taskId].data[1] -= 1; return; } - spriteId = GetAnimBattlerSpriteId(0); + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gTasks[taskId].data[0] += 8; if (gTasks[taskId].data[0] <= 0xFF) { @@ -626,7 +626,7 @@ static void sub_80B5AD4(u8 taskId) task->data[1] = 0; task->data[2] = 0; task->data[3] = 16; - task->data[13] = GetAnimBattlerSpriteId(1); + task->data[13] = GetAnimBattlerSpriteId(ANIM_TARGET); task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16; if (position == 1) { @@ -711,7 +711,7 @@ static void sub_80B5DCC(u8 taskId) { case 0: gScanlineEffect.state = 3; - task->data[14] = GetAnimBattlerSpriteId(1); + task->data[14] = GetAnimBattlerSpriteId(ANIM_TARGET); if (rank == 1) ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); else @@ -1288,7 +1288,7 @@ static void sub_80B6BE4(u8 taskId) task->data[1] = 0; task->data[2] = 0; task->data[3] = 16; - task->data[4] = GetAnimBattlerSpriteId(0); + task->data[4] = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[5] = gSprites[task->data[4]].oam.priority; task->data[6] = (gSprites[task->data[4]].oam.paletteNum + 16) << 4; gSprites[task->data[4]].oam.objMode = ST_OAM_OBJ_BLEND; diff --git a/src/ground.c b/src/ground.c index 97f42e5c5..7ab6b6e95 100644 --- a/src/ground.c +++ b/src/ground.c @@ -298,7 +298,7 @@ static void sub_80B8ED4(u8 taskId) switch (task->data[0]) { case 0: - task->data[10] = GetAnimBattlerSpriteId(0); + task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); if (task->data[11] == 1) { @@ -360,7 +360,7 @@ static void sub_80B8ED4(u8 taskId) static void sub_80B908C(u8 taskId) { - u8 spriteId = GetAnimBattlerSpriteId(0); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = TRUE; gSprites[spriteId].pos2.x = 0; @@ -391,7 +391,7 @@ static void sub_80B912C(u8 taskId) switch (task->data[0]) { case 0: - task->data[10] = GetAnimBattlerSpriteId(0); + task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[task->data[10]].invisible = FALSE; gSprites[task->data[10]].pos2.x = 0; gSprites[task->data[10]].pos2.y = 160 - gSprites[task->data[10]].pos1.y; @@ -410,7 +410,7 @@ static void sub_80B91B0(u8 taskId) switch (task->data[0]) { case 0: - task->data[10] = GetAnimBattlerSpriteId(0); + task->data[10] = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); if (task->data[11] == 1) task->data[12] = gBattle_BG1_X; diff --git a/src/ice.c b/src/ice.c new file mode 100644 index 000000000..9914a6992 --- /dev/null +++ b/src/ice.c @@ -0,0 +1,1477 @@ +#include "global.h" +#include "battle_anim.h" +#include "bg.h" +#include "field_weather.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "main.h" +#include "palette.h" +#include "random.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "constants/battle_anim.h" + +struct HailStruct +{ + s32 unk0:10; + s32 unk1:10; + s32 unk2:8; + s32 unk3:4; +}; + +static void sub_80AF108(struct Sprite *sprite); +static void sub_80AF28C(struct Sprite *sprite); +static void AnimIcePunchSwirlingParticle(struct Sprite *sprite); +static void AnimIceBeamParticle(struct Sprite *sprite); +static void AnimIceEffectParticle(struct Sprite *sprite); +static void AnimFlickerIceEffectParticle(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step1(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step2(struct Sprite *sprite); +static void AnimSwirlingSnowball_Step3(struct Sprite *sprite); +static void AnimSwirlingSnowball_End(struct Sprite *sprite); +static void AnimMoveParticleBeyondTarget(struct Sprite *sprite); +static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite); +static void AnimWaveFromCenterOfTarget(struct Sprite *sprite); +static void InitSwirlingFogAnim(struct Sprite *sprite); +static void AnimSwirlingFogAnim(struct Sprite *sprite); +static void AnimThrowMistBall(struct Sprite *sprite); +static void InitPoisonGasCloudAnim(struct Sprite *sprite); +static void MovePoisonGasCloud(struct Sprite *sprite); +static void AnimHailBegin(struct Sprite *sprite); +static void AnimHailContinue(struct Sprite *sprite); +static void InitIceBallAnim(struct Sprite *sprite); +static void AnimThrowIceBall(struct Sprite *sprite); +static void InitIceBallParticle(struct Sprite *sprite); +static void AnimIceBallParticle(struct Sprite *sprite); +static void AnimTask_Haze2(u8 taskId); +static void AnimTask_OverlayFogTiles(u8 taskId); +static void AnimTask_Hail2(u8 taskId); +static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c); + +static const union AnimCmd gUnknown_83E62C0[] = +{ + ANIMCMD_FRAME(0, 5, .hFlip = TRUE), + ANIMCMD_FRAME(1, 5, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E62CC[] = +{ + gUnknown_83E62C0, +}; + +// not used +static const struct SpriteTemplate gUnknown_83E62D0 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80AF108, +}; + +static const union AnimCmd gUnknown_83E62E8[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E62F0[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E62F8[] = +{ + ANIMCMD_FRAME(6, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6300[] = +{ + ANIMCMD_FRAME(7, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6308[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6310[] = +{ + ANIMCMD_FRAME(12, 6), + ANIMCMD_FRAME(13, 6), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E631C[] = +{ + gUnknown_83E62E8, +}; + +static const union AnimCmd *const gUnknown_83E6320[] = +{ + gUnknown_83E62F0, +}; + +static const union AnimCmd *const gUnknown_83E6324[] = +{ + gUnknown_83E62F8, +}; + +static const union AnimCmd *const gUnknown_83E6328[] = +{ + gUnknown_83E6300, +}; + +static const union AnimCmd *const gUnknown_83E632C[] = +{ + gUnknown_83E6308, +}; + +static const union AnimCmd *const gUnknown_83E6330[] = +{ + gUnknown_83E6310, +}; + +static const union AffineAnimCmd gUnknown_83E6334[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 40, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E6344[] = +{ + gUnknown_83E6334, +}; + +const struct SpriteTemplate gUnknown_83E6348 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83ACBE8, + .anims = gUnknown_83E6320, + .images = NULL, + .affineAnims = gUnknown_83E6344, + .callback = AnimIcePunchSwirlingParticle, +}; + +const struct SpriteTemplate gUnknown_83E6360 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83ACAE8, + .anims = gUnknown_83E6324, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimIcePunchSwirlingParticle, +}; + +static const union AffineAnimCmd gUnknown_83E6378[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E6388[] = +{ + gUnknown_83E6378, +}; + +const struct SpriteTemplate gUnknown_83E638C = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83ACB88, + .anims = gUnknown_83E6320, + .images = NULL, + .affineAnims = gUnknown_83E6388, + .callback = AnimIceBeamParticle, +}; + +const struct SpriteTemplate gUnknown_83E63A4 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83ACAE8, + .anims = gUnknown_83E6324, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimIceBeamParticle, +}; + +static const union AffineAnimCmd gUnknown_83E63BC[] = +{ + AFFINEANIMCMD_FRAME(0xCE, 0xCE, 0, 0), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E63DC[] = +{ + gUnknown_83E63BC, +}; + +const struct SpriteTemplate gUnknown_83E63E0 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83ACB88, + .anims = gUnknown_83E6320, + .images = NULL, + .affineAnims = gUnknown_83E63DC, + .callback = AnimIceEffectParticle, +}; + +const struct SpriteTemplate gUnknown_83E63F8 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83ACB48, + .anims = gUnknown_83E6324, + .images = NULL, + .affineAnims = gUnknown_83E63DC, + .callback = AnimIceEffectParticle, +}; + +const struct SpriteTemplate gUnknown_83E6410 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83AC9C8, + .anims = gUnknown_83E6328, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSwirlingSnowball_Step1, +}; + +const struct SpriteTemplate gUnknown_83E6428 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83AC9D0, + .anims = gUnknown_83E632C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveParticleBeyondTarget, +}; + +const struct SpriteTemplate gUnknown_83E6440 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83AC9C8, + .anims = gUnknown_83E6328, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveParticleBeyondTarget, +}; + +static const union AnimCmd gUnknown_83E6458[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6478[] = +{ + gUnknown_83E6458, +}; + +const struct SpriteTemplate gUnknown_83E647C = +{ + .tileTag = ANIM_TAG_ICE_SPIKES, + .paletteTag = ANIM_TAG_ICE_SPIKES, + .oam = &gOamData_83ACB28, + .anims = gUnknown_83E6478, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWaveFromCenterOfTarget, +}; + +static const union AnimCmd gUnknown_83E6494[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E64A0[] = +{ + gUnknown_83E6494, +}; + +const struct SpriteTemplate gUnknown_83E64A4 = +{ + .tileTag = ANIM_TAG_MIST_CLOUD, + .paletteTag = ANIM_TAG_MIST_CLOUD, + .oam = &gOamData_83ACB18, + .anims = gUnknown_83E64A0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = InitSwirlingFogAnim, +}; + +const struct SpriteTemplate gUnknown_83E64BC = +{ + .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD, + .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD, + .oam = &gOamData_83ACB18, + .anims = gUnknown_83E64A0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = InitSwirlingFogAnim, +}; + +static const u8 gUnknown_83E64D4[] = +{ + 0, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7, 8, 8, 8, 9, +}; + +const struct SpriteTemplate gUnknown_83E64E8 = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowMistBall, +}; + +static const u8 gUnknown_83E6500[] = +{ + 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, +}; + +const struct SpriteTemplate gUnknown_83E6514 = +{ + .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD, + .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD, + .oam = &gOamData_83ACB18, + .anims = gUnknown_83E64A0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = InitPoisonGasCloudAnim, +}; + +static const struct HailStruct gUnknown_83E652C[] = +{ + {100, 120, 0, 2}, + {85, 120, 0, 0}, + {242, 120, 1, 1}, + {66, 120, 2, 1}, + {182, 120, 3, 0}, + {60, 120, 0, 2}, + {214, 120, 1, 0}, + {113, 120, 0, 1}, + {210, 120, 3, 1}, + {38, 120, 2, 0}, +}; + +static const union AffineAnimCmd gUnknown_83E6554[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6564[] = +{ + AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6574[] = +{ + AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6584[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6594[] = +{ + gUnknown_83E6554, + gUnknown_83E6564, + gUnknown_83E6574, +}; + +static const union AffineAnimCmd *const gUnknown_83E65A0[] = +{ + gUnknown_83E6584, +}; + +static const struct SpriteTemplate gUnknown_83E65A4 = +{ + .tileTag = ANIM_TAG_HAIL, + .paletteTag = ANIM_TAG_HAIL, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6594, + .callback = AnimHailBegin, +}; + +const struct SpriteTemplate gUnknown_83E65BC = +{ + .tileTag = ANIM_TAG_HAIL, + .paletteTag = ANIM_TAG_HAIL, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E65A0, + .callback = sub_8077350, +}; + +static const union AnimCmd gUnknown_83E65D4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E65DC[] = +{ + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E65F0[] = +{ + gUnknown_83E65D4, + gUnknown_83E65DC, +}; + +static const union AffineAnimCmd gUnknown_83E65F8[] = +{ + AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6608[] = +{ + AFFINEANIMCMD_FRAME(0x118, 0x118, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6618[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6628[] = +{ + AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6638[] = +{ + AFFINEANIMCMD_FRAME(0x1C0, 0x1C0, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6648[] = +{ + gUnknown_83E65F8, + gUnknown_83E6608, + gUnknown_83E6618, + gUnknown_83E6628, + gUnknown_83E6638, +}; + +const struct SpriteTemplate gUnknown_83E665C = +{ + .tileTag = ANIM_TAG_ICE_CHUNK, + .paletteTag = ANIM_TAG_ICE_CHUNK, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E65F0, + .images = NULL, + .affineAnims = gUnknown_83E6648, + .callback = InitIceBallAnim, +}; + +const struct SpriteTemplate gUnknown_83E6674 = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_83AC9C8, + .anims = gUnknown_83E6324, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = InitIceBallParticle, +}; + +// not used +static void sub_80AF108(struct Sprite *sprite) +{ + s16 targetX, targetY, attackerX, attackerY; + + sprite->oam.tileNum += 7; + targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[0] + attackerX; + sprite->data[2] = gBattleAnimArgs[2] + targetX; + sprite->data[3] = gBattleAnimArgs[1] + attackerY; + sprite->data[4] = gBattleAnimArgs[3] + targetY; + sub_8074C80(sprite); + // won't match with while loop + for (; (targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192); targetX += sprite->data[1], targetY += sprite->data[2]) + ; + sprite->data[1] = -sprite->data[1]; + sprite->data[2] = -sprite->data[2]; + for (; (attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192); attackerX += sprite->data[1], attackerY += sprite->data[2]) + ; + sprite->pos1.x = attackerX; + sprite->pos1.y = attackerY; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = attackerX; + sprite->data[2] = targetX; + sprite->data[3] = attackerY; + sprite->data[4] = targetY; + sub_8074C80(sprite); + sprite->data[3] = gBattleAnimArgs[5]; + sprite->data[4] = gBattleAnimArgs[6]; + sprite->callback = sub_80AF28C; +} + +// not used +static void sub_80AF28C(struct Sprite *sprite) +{ + if (sprite->data[0] != 0) + { + sprite->data[5] += sprite->data[1]; + sprite->data[6] += sprite->data[2]; + sprite->pos2.x = sprite->data[5]; + sprite->pos2.y = sprite->data[6]; + sprite->pos2.x += Sin(sprite->data[7], sprite->data[3]); + sprite->pos2.y += Sin(sprite->data[7], sprite->data[3]); + sprite->data[7] = (sprite->data[7] + sprite->data[4]) & 0xFF; + --sprite->data[0]; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Animates the swirling ice crystals in Ice Punch. +// arg 0: initial position angle around circle (0-256) +static void AnimIcePunchSwirlingParticle(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 60; + sprite->data[2] = 9; + sprite->data[3] = 30; + sprite->data[4] = -512; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback(sprite); +} + +// Animates the ice particles in Ice Beam. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +static void AnimIceBeamParticle(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = StartAnimLinearTranslation; +} + +// Animates the ice crystals at the end of Ice Punch, Ice Beam, Tri Attack, +// Weather Ball (Hail), Blizzard, and Powder Snow. +// arg 0: target x offset +// arg 1: target y offset +// arg 2: ??? unknown boolean +static void AnimIceEffectParticle(struct Sprite *sprite) +{ + if (gBattleAnimArgs[2] == 0) + { + InitSpritePosToAnimTarget(sprite, TRUE); + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + StoreSpriteCallbackInData6(sprite, AnimFlickerIceEffectParticle); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +static void AnimFlickerIceEffectParticle(struct Sprite *sprite) +{ + sprite->invisible ^= 1; + if (++sprite->data[0] == 20) + DestroySpriteAndMatrix(sprite); +} + +// Animates the small snowballs that swirl around the target in Blizzard and Icy Wind. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: particle speed +// arg 5: multiple targets? (boolean) +static void AnimSwirlingSnowball_Step1(struct Sprite *sprite) +{ + s32 i; + s16 tempDataHolder[8]; + + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + if (!gBattleAnimArgs[5]) + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + } + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + for (i = 0; i < 8; ++i) + tempDataHolder[i] = sprite->data[i]; + InitAnimFastLinearTranslationWithSpeed(sprite); + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + while (1) + { + sprite->data[0] = 1; + AnimFastTranslateLinear(sprite); + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + break; + } + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = sprite->pos2.y = 0; + for (i = 0; i < 8; ++i) + sprite->data[i] = tempDataHolder[i]; + sprite->callback = sub_8075830; + StoreSpriteCallbackInData6(sprite, AnimSwirlingSnowball_Step2); +} + +static void AnimSwirlingSnowball_Step2(struct Sprite *sprite) +{ + s16 tempVar; + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 128; + tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20; + sprite->data[3] = Sin(sprite->data[0], tempVar); + sprite->data[4] = Cos(sprite->data[0], 0xF); + sprite->data[5] = 0; + sprite->callback = AnimSwirlingSnowball_Step3; + sprite->callback(sprite); +} + +static void AnimSwirlingSnowball_Step3(struct Sprite *sprite) +{ + s16 tempVar = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 20 : -20; + + if (sprite->data[5] <= 31) + { + sprite->pos2.x = Sin(sprite->data[0], tempVar) - sprite->data[3]; + sprite->pos2.y = Cos(sprite->data[0], 15) - sprite->data[4]; + sprite->data[0] = (sprite->data[0] + 16) & 0xFF; + sprite->data[5] += 1; + } + else + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = sprite->pos2.y = 0; + sprite->data[3] = sprite->data[4] = 0; + sprite->callback = AnimSwirlingSnowball_End; + } +} + +static void AnimSwirlingSnowball_End(struct Sprite *sprite) +{ + sprite->data[0] = 1; + AnimFastTranslateLinear(sprite); + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 256 + || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); +} + +// Moves particles towards the target mon and off the screen. Used to animate +// the large snowballs in Blizzard and the small snowballs in Powder Snow. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: speed +// arg 5: wave amplitude +// arg 6: wave frequency +// arg 7: multiple targets? (boolean) +static void AnimMoveParticleBeyondTarget(struct Sprite *sprite) +{ + s32 i; + s16 tempDataHolder[8]; + + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + if (!gBattleAnimArgs[7]) + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + } + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->data[2] -= gBattleAnimArgs[2]; + else + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + InitAnimFastLinearTranslationWithSpeed(sprite); + for (i = 0; i < 8; ++i) + tempDataHolder[i] = sprite->data[i]; + sprite->data[1] ^= 1; + sprite->data[2] ^= 1; + while (1) + { + sprite->data[0] = 1; + AnimFastTranslateLinear(sprite); + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + break; + } + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + for (i = 0; i < 8; ++i) + sprite->data[i] = tempDataHolder[i]; + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[6]; + sprite->callback = AnimWiggleParticleTowardsTarget; +} + +// Moves particles in a sine wave towards the target. +static void AnimWiggleParticleTowardsTarget(struct Sprite *sprite) +{ + AnimFastTranslateLinear(sprite); + if (sprite->data[0] == 0) + sprite->data[0] = 1; + sprite->pos2.y += Sin(sprite->data[7], sprite->data[5]); + sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF; + if (sprite->data[0] == 1) + { + if ((u32)(sprite->pos1.x + sprite->pos2.x + 16) > 272 + || sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.y + sprite->pos2.y < -16) + DestroyAnimSprite(sprite); + } +} + +// Animates the ice pilar wave used by Icy Wind. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: ??? unknown boolean +static void AnimWaveFromCenterOfTarget(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (gBattleAnimArgs[2] == 0) + { + InitSpritePosToAnimTarget(sprite, FALSE); + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + ++sprite->data[0]; + } + else + { + if (sprite->animEnded) + DestroyAnimSprite(sprite); + } +} + +// Animates the fog that swirls around the mon in Mist and Smog. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: change in y pixels per rotation +// arg 3: duration +// arg 4: animate on opponent? (boolean) +// arg 5: ??? unknown boolean +static void InitSwirlingFogAnim(struct Sprite *sprite) +{ + s16 tempVar; + u8 battler; + + if (gBattleAnimArgs[4] == 0) + { + if (gBattleAnimArgs[5] == 0) + { + InitSpritePosToAnimAttacker(sprite, FALSE); + } + else + { + SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + battler = gBattleAnimAttacker; + } + else + { + if (gBattleAnimArgs[5] == 0) + { + InitSpritePosToAnimTarget(sprite, FALSE); + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + battler = gBattleAnimTarget; + } + sprite->data[7] = battler; + if (gBattleAnimArgs[5] == 0 || !IsDoubleBattle()) + tempVar = 0x20; + else + tempVar = 0x40; + sprite->data[6] = tempVar; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + sprite->pos1.y += 8; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2]; + InitAnimLinearTranslation(sprite); + sprite->data[5] = 64; + sprite->callback = AnimSwirlingFogAnim; + sprite->callback(sprite); +} + +// Animates swirling fog initialized by InitSwirlingFogAnim. +static void AnimSwirlingFogAnim(struct Sprite *sprite) +{ + if (!AnimTranslateLinear(sprite)) + { + sprite->pos2.x += Sin(sprite->data[5], sprite->data[6]); + sprite->pos2.y += Cos(sprite->data[5], -6); + if ((u16)(sprite->data[5] - 64) <= 0x7F) + sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]); + else + sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]) + 1; + sprite->data[5] = (sprite->data[5] + 3) & 0xFF; + } + else + { + DestroyAnimSprite(sprite); + } +} + +// Fades mons to black and places foggy overlay in Haze. +void AnimTask_Haze1(u8 taskId) +{ + struct BattleAnimBgData animBg; + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + sub_80752A0(&animBg); + LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset); + AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap); + LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32); + if (IsContest()) + sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0); + gTasks[taskId].func = AnimTask_Haze2; +} + +static void AnimTask_Haze2(u8 taskId) +{ + struct BattleAnimBgData animBg; + + gBattle_BG1_X += -1; + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + ++gTasks[taskId].data[9]; + gTasks[taskId].data[11] = gUnknown_83E64D4[gTasks[taskId].data[9]]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 9) + { + ++gTasks[taskId].data[12]; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 9; + ++gTasks[taskId].data[12]; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + --gTasks[taskId].data[11]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 0) + { + ++gTasks[taskId].data[12]; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_80752A0(&animBg); + sub_8075358(1); + sub_8075358(2); + ++gTasks[taskId].data[12]; + // fall through + case 4: + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + DestroyAnimVisualTask(taskId); + break; + } +} + +// Throws the ball in Mist Ball. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: targey x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: ??? unknown (seems to vibrate target mon somehow) +static void AnimThrowMistBall(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = TranslateAnimSpriteToTargetMonLocation; +} + +// Displays misty background in Mist Ball. +void AnimTask_LoadMistTiles(u8 taskId) +{ + struct BattleAnimBgData animBg; + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + sub_80752A0(&animBg); + LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset); + AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap); + LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32); + if (IsContest()) + sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0); + gTasks[taskId].data[15] = -1; + gTasks[taskId].func = AnimTask_OverlayFogTiles; +} + +static void AnimTask_OverlayFogTiles(u8 taskId) +{ + struct BattleAnimBgData animBg; + + gBattle_BG1_X += gTasks[taskId].data[15]; + switch (gTasks[taskId].data[12]) + { + case 0: + gTasks[taskId].data[9] += 1; + gTasks[taskId].data[11] = gUnknown_83E6500[gTasks[taskId].data[9]]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 17 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 5) + { + ++gTasks[taskId].data[12]; + gTasks[taskId].data[11] = 0; + } + break; + case 1: + if (++gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 5; + ++gTasks[taskId].data[12]; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11] -= 1; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 0) + { + ++gTasks[taskId].data[12]; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_80752A0(&animBg); + sub_8075358(1); + sub_8075358(2); + ++gTasks[taskId].data[12]; + // fall through + case 4: + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + DestroyAnimVisualTask(taskId); + break; + } +} + +// Initializes gas clouds in the Poison Gas animation. +// arg 0: duration +// arg 1: ? target x offset +// arg 2: ? target y offset +// arg 3: ? swirl start x +// arg 4: ? swirl start y +// arg 5: ??? unknown +// arg 6: ??? unknown +// arg 7: ??? unknown boolean +static void InitPoisonGasCloudAnim(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[0]; + if (GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2)) + sprite->data[7] = 0x8000; + if ((gBattlerPositions[gBattleAnimTarget] & BIT_SIDE) == B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + if ((sprite->data[7] & 0x8000) && (gBattlerPositions[gBattleAnimAttacker] & BIT_SIDE) == B_SIDE_PLAYER) + sprite->subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; + sprite->data[6] = 1; + } + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + if (gBattleAnimArgs[7]) + { + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4]; + sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8; + } + else + { + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[4]; + sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8; + } + if (IsContest()) + { + sprite->data[6] = 1; + sprite->subpriority = 0x80; + } + InitAnimLinearTranslation(sprite); + sprite->callback = MovePoisonGasCloud; +} + +static void MovePoisonGasCloud(struct Sprite *sprite) +{ + s32 value; + + switch (sprite->data[7] & 0xFF) + { + case 0: + AnimTranslateLinear(sprite); + value = gSineTable[sprite->data[5]]; + sprite->pos2.x += value >> 4; + if (sprite->data[6]) + sprite->data[5] = (sprite->data[5] - 8) & 0xFF; + else + sprite->data[5] = (sprite->data[5] + 8) & 0xFF; + if (sprite->data[0] <= 0) + { + sprite->data[0] = 80; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x; + sprite->pos1.y += sprite->pos2.y; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + 29; + ++sprite->data[7]; + if (IsContest()) + sprite->data[5] = 80; + else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER) + sprite->data[5] = 204; + else + sprite->data[5] = 80; + sprite->pos2.y = 0; + value = gSineTable[sprite->data[5]]; + sprite->pos2.x = value >> 3; + sprite->data[5] = (sprite->data[5] + 2) & 0xFF; + InitAnimLinearTranslation(sprite); + } + break; + case 1: + AnimTranslateLinear(sprite); + value = gSineTable[sprite->data[5]]; + sprite->pos2.x += value >> 3; + sprite->pos2.y += (gSineTable[sprite->data[5] + 0x40] * -3) >> 8; + if (!IsContest()) + { + u16 var0 = sprite->data[5] - 0x40; + + if (var0 <= 0x7F) + sprite->oam.priority = sprite->data[7] >> 8; + else + sprite->oam.priority = (sprite->data[7] >> 8) + 1; + sprite->data[5] = (sprite->data[5] + 4) & 0xFF; + } + else + { + u16 var0 = sprite->data[5] - 0x40; + + if (var0 <= 0x7F) + sprite->subpriority = 128; + else + sprite->subpriority = 140; + sprite->data[5] = (sprite->data[5] - 4) & 0xFF; + } + if (sprite->data[0] <= 0) + { + sprite->data[0] = 0x300; + sprite->data[1] = sprite->pos1.x += sprite->pos2.x; + sprite->data[3] = sprite->pos1.y += sprite->pos2.y; + sprite->data[4] = sprite->pos1.y + 4; + if (IsContest()) + sprite->data[2] = -0x10; + else if (GET_BATTLER_SIDE2(gBattleAnimTarget) != B_SIDE_PLAYER) + sprite->data[2] = 0x100; + else + sprite->data[2] = -0x10; + ++sprite->data[7]; + sprite->pos2.x = sprite->pos2.y = 0; + sub_8075678(sprite); + } + break; + case 2: + if (AnimTranslateLinear(sprite)) + { + if (sprite->oam.affineMode & 1) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + } + DestroySprite(sprite); + --gAnimVisualTaskCount; + } + break; + } +} + +// Creates Hail. +void AnimTask_Hail1(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->func = AnimTask_Hail2; +} + +static void AnimTask_Hail2(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[4] > 2) + { + task->data[4] = 0; + task->data[5] = 0; + task->data[2] = 0; + ++task->data[0]; + } + break; + case 1: + if (task->data[5] == 0) + { + if (GenerateHailParticle(task->data[3], task->data[2], taskId, 1)) + ++task->data[1]; + if (++task->data[2] == 3) + { + if (++task->data[3] == 10) + ++task->data[0]; + else + --task->data[0]; + } + else + { + task->data[5] = 1; + } + } + else + { + --task->data[5]; + } + break; + case 2: + if (task->data[1] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c) +{ + u8 id; + s16 battlerX, battlerY; + s16 spriteX; + bool8 possibleBool = FALSE; + s8 unk = gUnknown_83E652C[hailStructId].unk3; + + if (unk != 2) + { + id = GetBattlerAtPosition(gUnknown_83E652C[hailStructId].unk2); + if (IsBattlerSpriteVisible(id)) + { + possibleBool = TRUE; + battlerX = GetBattlerSpriteCoord(id, BATTLER_COORD_X_2); + battlerY = GetBattlerSpriteCoord(id, BATTLER_COORD_Y_PIC_OFFSET); + switch (unk) + { + case 0: + battlerX -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6; + battlerY -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6; + break; + case 1: + battlerX += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6; + battlerY += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6; + break; + } + } + else + { + battlerX = (gUnknown_83E652C[hailStructId].unk0); + battlerY = (gUnknown_83E652C[hailStructId].unk1); + } + } + else + { + battlerX = (gUnknown_83E652C[hailStructId].unk0); + battlerY = (gUnknown_83E652C[hailStructId].unk1); + } + spriteX = battlerX - ((battlerY + 8) / 2); + id = CreateSprite(&gUnknown_83E65A4, spriteX, -8, 18); + if (id == MAX_SPRITES) + { + return FALSE; + } + else + { + StartSpriteAffineAnim(&gSprites[id], affineAnimNum); + gSprites[id].data[0] = possibleBool; + gSprites[id].data[3] = battlerX; + gSprites[id].data[4] = battlerY; + gSprites[id].data[5] = affineAnimNum; + gSprites[id].data[6] = taskId; + gSprites[id].data[7] = c; + return TRUE; + } +} + +static void AnimHailBegin(struct Sprite *sprite) +{ + u8 spriteId; + + sprite->pos1.x += 4; + sprite->pos1.y += 8; + if (sprite->pos1.x < sprite->data[3] && sprite->pos1.y < sprite->data[4]) + return; + if (sprite->data[0] == 1 && sprite->data[5] == 0) + { + spriteId = CreateSprite(&gUnknown_83E63E0, sprite->data[3], sprite->data[4], sprite->subpriority); + sprite->data[0] = spriteId; + if (spriteId != 64) + { + gSprites[sprite->data[0]].callback = AnimHailContinue; + gSprites[sprite->data[0]].data[6] = sprite->data[6]; + gSprites[sprite->data[0]].data[7] = sprite->data[7]; + } + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } + else + { + --gTasks[sprite->data[6]].data[sprite->data[7]]; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +static void AnimHailContinue(struct Sprite *sprite) +{ + if (++sprite->data[0] == 20) + { + --gTasks[sprite->data[6]].data[sprite->data[7]]; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +// Initializes the animation for Ice Ball. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: arc height (negative) +static void InitIceBallAnim(struct Sprite *sprite) +{ + u8 animNum = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer - 1; + + if (animNum > 4) + animNum = 4; + StartSpriteAffineAnim(sprite, animNum); + InitSpritePosToAnimAttacker(sprite, 1); + sprite->data[0] = gBattleAnimArgs[4]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimThrowIceBall; +} + +// Throws the ball of ice in Ice Ball. +static void AnimThrowIceBall(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + StartSpriteAnim(sprite, 1); + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } +} + +// Initializes the particles that scatter at the end of the Ice Ball animation. +static void InitIceBallParticle(struct Sprite *sprite) +{ + s16 randA, randB; + + sprite->oam.tileNum += 8; + InitSpritePosToAnimTarget(sprite, TRUE); + randA = (Random() & 0xFF) + 256; + randB = Random() & 0x1FF; + if (randB > 0xFF) + randB = 256 - randB; + sprite->data[1] = randA; + sprite->data[2] = randB; + sprite->callback = AnimIceBallParticle; +} + +// Animates the particles created by InitIceBallParticle. +static void AnimIceBallParticle(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + if (sprite->data[1] & 1) + sprite->pos2.x = -(sprite->data[3] >> 8); + else + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + if (++sprite->data[0] == 21) + DestroyAnimSprite(sprite); +} + +// Counter for Ice Ball. +void AnimTask_GetRolloutCounter(u8 taskId) +{ + u8 arg = gBattleAnimArgs[0]; + + gBattleAnimArgs[arg] = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer - 1; + DestroyAnimVisualTask(taskId); +} diff --git a/src/poison.c b/src/poison.c new file mode 100644 index 000000000..004e9aa98 --- /dev/null +++ b/src/poison.c @@ -0,0 +1,298 @@ +#include "global.h" +#include "battle_anim.h" +#include "trig.h" + +static void sub_80B1620(struct Sprite *sprite); +static void sub_80B16A0(struct Sprite *sprite); +static void sub_80B1744(struct Sprite *sprite); +static void sub_80B17C4(struct Sprite *sprite); +static void AnimBubbleEffect(struct Sprite *sprite); +static void sub_80B1684(struct Sprite *sprite); +static void sub_80B1728(struct Sprite *sprite); +static void sub_80B1798(struct Sprite *sprite); +static void AnimBubbleEffectStep(struct Sprite *sprite); + +static const union AnimCmd gUnknown_83E6994[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(24, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E69A8[] = +{ + gUnknown_83E6994, +}; + +const struct SpriteTemplate gUnknown_83E69AC = +{ + .tileTag = ANIM_TAG_TOXIC_BUBBLE, + .paletteTag = ANIM_TAG_TOXIC_BUBBLE, + .oam = &gOamData_83ACA18, + .anims = gUnknown_83E69A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +static const union AnimCmd gUnknown_83E69C4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E69CC[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E69D4[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E69DC[] = +{ + gUnknown_83E69C4, +}; + +static const union AnimCmd *const gUnknown_83E69E0[] = +{ + gUnknown_83E69CC, +}; + +static const union AnimCmd *const gUnknown_83E69E4[] = +{ + gUnknown_83E69D4, +}; + +static const union AffineAnimCmd gUnknown_83E69E8[] = +{ + AFFINEANIMCMD_FRAME(0x160, 0x160, 0, 0), + AFFINEANIMCMD_FRAME(-0xA, -0xA, 0, 10), + AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gUnknown_83E6A08[] = +{ + AFFINEANIMCMD_FRAME(0xEC, 0xEC, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6A18[] = +{ + gUnknown_83E69E8, +}; + +static const union AffineAnimCmd *const gUnknown_83E6A1C[] = +{ + gUnknown_83E6A08, +}; + +const struct SpriteTemplate gUnknown_83E6A20 = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_83ACA90, + .anims = gUnknown_83E69DC, + .images = NULL, + .affineAnims = gUnknown_83E6A18, + .callback = sub_80B1620, +}; + +const struct SpriteTemplate gUnknown_83E6A38 = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_83ACA90, + .anims = gUnknown_83E69DC, + .images = NULL, + .affineAnims = gUnknown_83E6A18, + .callback = sub_80B16A0, +}; + +const struct SpriteTemplate gUnknown_83E6A50 = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_83ACA30, + .anims = gUnknown_83E69E4, + .images = NULL, + .affineAnims = gUnknown_83E6A1C, + .callback = sub_80B1744, +}; + +static const union AffineAnimCmd gUnknown_83E6A68[] = +{ + AFFINEANIMCMD_FRAME(-0x10, 0x10, 0, 6), + AFFINEANIMCMD_FRAME(0x10, -0x10, 0, 6), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E6A80[] = +{ + gUnknown_83E6A68, +}; + +const struct SpriteTemplate gUnknown_83E6A84 = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_83ACA90, + .anims = gUnknown_83E69E0, + .images = NULL, + .affineAnims = gUnknown_83E6A80, + .callback = sub_80B17C4, +}; + +static const union AffineAnimCmd gUnknown_83E6A9C[] = +{ + AFFINEANIMCMD_FRAME(0x9C, 0x9C, 0, 0), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 20), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6AB4[] = +{ + gUnknown_83E6A9C, +}; + +const struct SpriteTemplate gPoisonBubbleSpriteTemplate = +{ + .tileTag = ANIM_TAG_POISON_BUBBLE, + .paletteTag = ANIM_TAG_POISON_BUBBLE, + .oam = &gOamData_83ACA30, + .anims = gUnknown_83E69DC, + .images = NULL, + .affineAnims = gUnknown_83E6AB4, + .callback = AnimBubbleEffect, +}; + +const struct SpriteTemplate gWaterBubbleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_83ACB50, + .anims = gUnknown_83E5A78, + .images = NULL, + .affineAnims = gUnknown_83E6AB4, + .callback = AnimBubbleEffect, +}; + +static void sub_80B1620(struct Sprite *sprite) +{ + if (!gBattleAnimArgs[3]) + StartSpriteAnim(sprite, 2); + InitSpritePosToAnimAttacker(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[5] = -30; + InitAnimArcTranslation(sprite); + sprite->callback = sub_80B1684; +} + +static void sub_80B1684(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +static void sub_80B16A0(struct Sprite *sprite) +{ + s16 l1, l2; + + if (!gBattleAnimArgs[3]) + StartSpriteAnim(sprite, 2); + InitSpritePosToAnimAttacker(sprite, 1); + SetAverageBattlerPositions(gBattleAnimTarget, 1, &l1, &l2); + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = l1 + gBattleAnimArgs[4]; + sprite->data[4] = l2 + gBattleAnimArgs[5]; + sprite->data[5] = -30; + InitAnimArcTranslation(sprite); + sprite->callback = sub_80B1728; +} + +static void sub_80B1728(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +static void sub_80B1744(struct Sprite *sprite) +{ + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[1]; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2]; + sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2]; + sprite->callback = sub_80B1798; +} + +static void sub_80B1798(struct Sprite *sprite) +{ + TranslateSpriteLinearFixedPoint(sprite); + sprite->data[1] -= sprite->data[5]; + sprite->data[2] -= sprite->data[6]; + if (!sprite->data[0]) + DestroyAnimSprite(sprite); +} + +static void sub_80B17C4(struct Sprite *sprite) +{ + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.y + sprite->data[0]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Animates a bubble by rising upward, swaying side to side, and +// enlarging the sprite. This is used as an after-effect by poison-type +// moves, along with MOVE_BUBBLE, and MOVE_BUBBLEBEAM. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: 0 = single-target, 1 = multi-target +static void AnimBubbleEffect(struct Sprite *sprite) +{ + if (!gBattleAnimArgs[2]) + { + InitSpritePosToAnimTarget(sprite, TRUE); + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + sprite->callback = AnimBubbleEffectStep; +} + +static void AnimBubbleEffectStep(struct Sprite *sprite) +{ + sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF; + sprite->pos2.x = Sin(sprite->data[0], 4); + sprite->data[1] += 0x30; + sprite->pos2.y = -(sprite->data[1] >> 8); + if (sprite->affineAnimEnded) + DestroyAnimSprite(sprite); +} diff --git a/src/pokemon.c b/src/pokemon.c index c4ae0c4da..57633dbad 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2365,25 +2365,25 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) { if (FlagGet(FLAG_BADGE01_GET) - && !GetBattlerSide(battlerIdAtk)) + && GetBattlerSide(battlerIdAtk) == B_SIDE_PLAYER) attack = (110 * attack) / 100; } if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) { if (FlagGet(FLAG_BADGE05_GET) - && !GetBattlerSide(battlerIdDef)) + && GetBattlerSide(battlerIdDef) == B_SIDE_PLAYER) defense = (110 * defense) / 100; } if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) { if (FlagGet(FLAG_BADGE07_GET) - && !GetBattlerSide(battlerIdAtk)) + && GetBattlerSide(battlerIdAtk) == B_SIDE_PLAYER) spAttack = (110 * spAttack) / 100; } if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | /*BATTLE_TYPE_BATTLE_TOWER |*/ BATTLE_TYPE_EREADER_TRAINER))) { if (FlagGet(FLAG_BADGE07_GET) - && !GetBattlerSide(battlerIdDef)) + && GetBattlerSide(battlerIdDef) == B_SIDE_PLAYER) spDefense = (110 * spDefense) / 100; } @@ -3917,7 +3917,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (gMain.inBattle) { gActiveBattler = gBattlerInMenuId; - cmdIndex = (GetBattlerSide(gActiveBattler) != 0); + cmdIndex = (GetBattlerSide(gActiveBattler) != B_SIDE_PLAYER); while (cmdIndex < gBattlersCount) { if (gBattlerPartyIndexes[cmdIndex] == partyIndex) @@ -4118,13 +4118,13 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { gAbsentBattlerFlags &= ~gBitTable[sp34]; CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlerPartyIndexes[sp34])); - if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.numRevivesUsed < 255) + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) gBattleResults.numRevivesUsed++; } else { gAbsentBattlerFlags &= ~gBitTable[gActiveBattler ^ 2]; - if (GetBattlerSide(gActiveBattler) == 0 && gBattleResults.numRevivesUsed < 255) + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) gBattleResults.numRevivesUsed++; } } @@ -4163,7 +4163,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (gMain.inBattle && sp34 != 4) { gBattleMons[sp34].hp = data; - if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == 0) + if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { if (gBattleResults.numHealingItemsUsed < 255) gBattleResults.numHealingItemsUsed++; @@ -6039,11 +6039,11 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality) } } -bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 bank) +bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 battlerId) { u8 buffer[12]; - if (gBattleTypeFlags & BATTLE_TYPE_GHOST && GetBattlerSide(bank)) + if (gBattleTypeFlags & BATTLE_TYPE_GHOST && GetBattlerSide(battlerId) != B_SIDE_PLAYER) { GetMonData(mon, MON_DATA_NICKNAME, buffer); StringGetEnd10(buffer); diff --git a/src/psychic.c b/src/psychic.c index a8108c55a..bbb6c3ed5 100644 --- a/src/psychic.c +++ b/src/psychic.c @@ -30,7 +30,7 @@ static void sub_80B3D78(u8 taskId); static const union AffineAnimCmd gUnknown_83E6DDC[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), - AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, -10, 120), + AFFINEANIMCMD_FRAME(-0x2, -0x2, -10, 120), AFFINEANIMCMD_END, }; @@ -305,7 +305,7 @@ const struct SpriteTemplate gUnknown_83E705C = static const union AffineAnimCmd gUnknown_83E7074[] = { - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 8), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), AFFINEANIMCMD_JUMP(0), }; @@ -313,27 +313,27 @@ static const union AffineAnimCmd gUnknown_83E7074[] = static const union AffineAnimCmd gUnknown_83E708C[] = { AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 6), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 2), AFFINEANIMCMD_JUMP(1), }; static const union AffineAnimCmd gUnknown_83E70B4[] = { AFFINEANIMCMD_FRAME(0xD0, 0xD0, 0, 0), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 4), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 4), AFFINEANIMCMD_JUMP(1), }; static const union AffineAnimCmd gUnknown_83E70DC[] = { AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 2), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 6), AFFINEANIMCMD_JUMP(1), }; @@ -384,11 +384,11 @@ static const union AffineAnimCmd gUnknown_83E7160[] = AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 17), AFFINEANIMCMD_LOOP(0), - AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10), + AFFINEANIMCMD_FRAME(-0x8, -0x8, 0, 10), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10), AFFINEANIMCMD_LOOP(4), AFFINEANIMCMD_LOOP(0), - AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 5), + AFFINEANIMCMD_FRAME(-0x10, -0x10, 0, 5), AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 5), AFFINEANIMCMD_LOOP(7), AFFINEANIMCMD_END, @@ -396,7 +396,7 @@ static const union AffineAnimCmd gUnknown_83E7160[] = static const union AffineAnimCmd gUnknown_83E71B8[] = { - AFFINEANIMCMD_FRAME(0xFFEC, 0x18, 0, 15), + AFFINEANIMCMD_FRAME(-0x14, 0x18, 0, 15), AFFINEANIMCMD_END, }; diff --git a/src/quest_log.c b/src/quest_log.c index 78fa73de7..d7b544882 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -31,10 +31,10 @@ #include "wild_encounter.h" #include "help_system.h" #include "party_menu.h" -#include "unk_8159F40.h" #include "pokemon_storage_system.h" #include "save.h" #include "link.h" +#include "quest_log_815A008.h" #include "quest_log_8150454.h" #include "quest_log.h" #include "new_menu_helpers.h" diff --git a/src/unk_8159F40.c b/src/quest_log_815A008.c index ef21d19d0..2d488a845 100644 --- a/src/unk_8159F40.c +++ b/src/quest_log_815A008.c @@ -1,5 +1,4 @@ #include "global.h" -#include "battle.h" #include "event_data.h" #include "quest_log.h" #include "fieldmap.h" @@ -7,152 +6,6 @@ #include "metatile_behavior.h" #include "link.h" #include "link_rfu.h" -#include "constants/species.h" -#include "constants/moves.h" -#include "constants/pokemon.h" - -struct PokedudeBattlePartyInfo -{ - u8 side; - u8 level; - u16 species; - u16 moves[4]; - u8 nature; - u8 gender; -}; - -static const struct PokedudeBattlePartyInfo sParties_Battle[] = { - { - .side = 0, - .level = 15, - .species = SPECIES_RATTATA, - .moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK}, - .nature = NATURE_LONELY, - .gender = MALE - }, - { - .side = 1, - .level = 18, - .species = SPECIES_PIDGEY, - .moves = {MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK}, - .nature = NATURE_NAUGHTY, - .gender = MALE - }, - {0xFF} -}; - -static const struct PokedudeBattlePartyInfo sParties_Status[] = { - { - .side = 0, - .level = 15, - .species = SPECIES_RATTATA, - .moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK}, - .nature = NATURE_LONELY, - .gender = MALE - }, - { - .side = 1, - .level = 14, - .species = SPECIES_ODDISH, - .moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER}, - .nature = NATURE_RASH, - .gender = MALE - }, - {0xFF} -}; - -static const struct PokedudeBattlePartyInfo sParties_Matchups[] = { - { - .side = 0, - .level = 15, - .species = SPECIES_POLIWAG, - .moves = {MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE}, - .nature = NATURE_RASH, - .gender = MALE - }, - { - .side = 0, - .level = 15, - .species = SPECIES_BUTTERFREE, - .moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER}, - .nature = NATURE_RASH, - .gender = MALE - }, - { - .side = 1, - .level = 14, - .species = SPECIES_ODDISH, - .moves = {MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER}, - .nature = NATURE_RASH, - .gender = MALE - }, - {0xFF} -}; - -static const struct PokedudeBattlePartyInfo sParties_Catching[] = { - { - .side = 0, - .level = 15, - .species = SPECIES_BUTTERFREE, - .moves = {MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE}, - .nature = NATURE_RASH, - .gender = MALE - }, - { - .side = 1, - .level = 11, - .species = SPECIES_JIGGLYPUFF, - .moves = {MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND}, - .nature = NATURE_CAREFUL, - .gender = MALE - }, - {0xFF} -}; - - -static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] = { - sParties_Battle, - sParties_Status, - sParties_Matchups, - sParties_Catching -}; - -void InitPokedudePartyAndOpponent(void) -{ - s32 i, j; - struct Pokemon * mon; - s32 myIdx = 0; - s32 opIdx = 0; - const struct PokedudeBattlePartyInfo * data; - - gBattleTypeFlags = BATTLE_TYPE_POKEDUDE; - ZeroPlayerPartyMons(); - ZeroEnemyPartyMons(); - data = sPokedudeBattlePartyPointers[gSpecialVar_0x8004]; - - i = 0; - do - { - if (data[i].side == 0) - { - mon = &gPlayerParty[myIdx]; - myIdx++; - } - else - { - mon = &gEnemyParty[opIdx]; - opIdx++; - } - CreateMonWithGenderNatureLetter(mon, data[i].species, data[i].level, 0, data[i].gender, data[i].nature, 0); - for (j = 0; j < 4; j++) - { - SetMonMoveSlot(mon, data[i].moves[j], j); - } - i++; - } while (data[i].side != 0xFF); -} - -// file boundary? void sub_815A008(struct QuestLog * questLog) { diff --git a/src/rock.c b/src/rock.c index 4db903344..c4b668941 100644 --- a/src/rock.c +++ b/src/rock.c @@ -87,8 +87,8 @@ const struct SpriteTemplate gUnknown_83E73E4 = static const union AffineAnimCmd gUnknown_83E73FC[] = { AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), - AFFINEANIMCMD_FRAME(0x2, 0xFFFD, 0, 5), - AFFINEANIMCMD_FRAME(0xFFFE, 0x3, 0, 5), + AFFINEANIMCMD_FRAME(0x2, -0x3, 0, 5), + AFFINEANIMCMD_FRAME(-0x2, 0x3, 0, 5), AFFINEANIMCMD_JUMP(1), }; @@ -152,7 +152,7 @@ static const struct Subsprite gUnknown_83E7468[] = static const struct SubspriteTable gUnknown_83E7470[] = { - { ARRAY_COUNT(gUnknown_83E7468), gUnknown_83E7468 }, + { NELEMS(gUnknown_83E7468), gUnknown_83E7468 }, }; static const union AnimCmd gUnknown_83E7478[] = @@ -588,7 +588,7 @@ void sub_80B4BD0(u8 taskId) task->data[13] = pan1; task->data[14] = (pan2 - pan1) / task->data[8]; task->data[1] = var4; - task->data[15] = GetAnimBattlerSpriteId(0); + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->func = sub_80B4D00; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index e33cb9d2e..2720f3204 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -25,11 +25,11 @@ #include "battle_transition.h" #include "battle_main.h" #include "battle.h" +#include "battle_controllers.h" #include "global.fieldmap.h" #include "teachy_tv.h" #include "help_system.h" #include "overworld.h" -#include "unk_8159F40.h" #include "graphics.h" #include "fieldmap.h" #include "strings.h" diff --git a/sym_common.txt b/sym_common.txt index 79ccc190d..def8fff58 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -192,10 +192,7 @@ gUnknown_3005E98: @ 3005E98 .include "mevent.o" .align 4 -gUnknown_3005EE0: @ 3005EE0 -@ const u8 *gUnknown_3005EE0[4] - .space 0x10 - + .include "battle_controller_pokedude.o" .align 4 .include "berry_fix_program.o" .include "m4a.o" |