diff options
-rw-r--r-- | asm/battle_anim.s | 3982 | ||||
-rw-r--r-- | include/battle_anim.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_anim.c | 1599 |
4 files changed, 1581 insertions, 4003 deletions
diff --git a/asm/battle_anim.s b/asm/battle_anim.s deleted file mode 100644 index 94f74c261..000000000 --- a/asm/battle_anim.s +++ /dev/null @@ -1,3982 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LaunchBattleAnimation -LaunchBattleAnimation: @ 80725D4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - bl sub_80767F0 - movs r0, 0 - bl UpdateOamPriorityInAllHealthboxes - movs r4, 0 - ldr r6, _08072618 @ =gBattlerPartyIndexes - movs r7, 0x64 - ldr r5, _0807261C @ =gAnimBattlerSpecies -_08072600: - lsls r0, r4, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08072624 - ldrh r0, [r6] - muls r0, r7 - ldr r1, _08072620 @ =gEnemyParty - b _0807262A - .align 2, 0 -_08072618: .4byte gBattlerPartyIndexes -_0807261C: .4byte gAnimBattlerSpecies -_08072620: .4byte gEnemyParty -_08072624: - ldrh r0, [r6] - muls r0, r7 - ldr r1, _0807264C @ =gPlayerParty -_0807262A: - adds r0, r1 - movs r1, 0xB - bl GetMonData - strh r0, [r5] - adds r6, 0x2 - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _08072600 - mov r0, r9 - cmp r0, 0 - bne _08072654 - ldr r0, _08072650 @ =gUnknown_2037F18 - mov r1, r9 - b _08072658 - .align 2, 0 -_0807264C: .4byte gPlayerParty -_08072650: .4byte gUnknown_2037F18 -_08072654: - ldr r0, _080726C0 @ =gUnknown_2037F18 - mov r1, r8 -_08072658: - strh r1, [r0] - ldr r4, _080726C4 @ =gUnknown_2037F14 - ldr r5, _080726C8 @ =gUnknown_2037ED4 - mov r0, r8 - lsls r3, r0, 2 - ldr r6, _080726CC @ =gAnimScriptActive - ldr r1, _080726D0 @ =gUnknown_2037EE0 - mov r12, r1 - ldr r0, _080726D4 @ =gAnimScriptCallback - mov r10, r0 - ldr r7, _080726D8 @ =RunAnimScriptCommand - ldr r1, _080726DC @ =gBattleAnimArgs - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xE -_08072676: - strh r2, [r0] - subs r0, 0x2 - cmp r0, r1 - bge _08072676 - movs r0, 0xFF - strb r0, [r4] - movs r0, 0x1 - negs r0, r0 - strb r0, [r4, 0x1] - ldr r1, [sp] - adds r0, r3, r1 - ldr r0, [r0] - str r0, [r5] - movs r0, 0x1 - strb r0, [r6] - movs r0, 0 - mov r1, r12 - strb r0, [r1] - mov r0, r10 - str r7, [r0] - ldr r1, _080726E0 @ =0x0000ffff - adds r2, r1, 0 - ldr r1, _080726E4 @ =gUnknown_2037EEE - movs r4, 0x7 -_080726A6: - ldrh r0, [r1] - orrs r0, r2 - strh r0, [r1] - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080726A6 - mov r0, r9 - cmp r0, 0 - beq _08072706 - movs r4, 0 - ldr r2, _080726E8 @ =gMovesWithQuietBGM - b _080726EE - .align 2, 0 -_080726C0: .4byte gUnknown_2037F18 -_080726C4: .4byte gUnknown_2037F14 -_080726C8: .4byte gUnknown_2037ED4 -_080726CC: .4byte gAnimScriptActive -_080726D0: .4byte gUnknown_2037EE0 -_080726D4: .4byte gAnimScriptCallback -_080726D8: .4byte RunAnimScriptCommand -_080726DC: .4byte gBattleAnimArgs -_080726E0: .4byte 0x0000ffff -_080726E4: .4byte gUnknown_2037EEE -_080726E8: .4byte gMovesWithQuietBGM -_080726EC: - adds r4, 0x1 -_080726EE: - lsls r0, r4, 1 - adds r0, r2 - ldrh r0, [r0] - ldr r1, _08072728 @ =0x0000ffff - cmp r0, r1 - beq _08072706 - cmp r8, r0 - bne _080726EC - ldr r0, _0807272C @ =gMPlayInfo_BGM - movs r2, 0x80 - bl m4aMPlayVolumeControl -_08072706: - ldr r0, _08072730 @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _08072734 @ =gBattle_WIN0V - strh r1, [r0] - ldr r0, _08072738 @ =gBattle_WIN1H - strh r1, [r0] - ldr r0, _0807273C @ =gBattle_WIN1V - strh r1, [r0] - 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 -_08072728: .4byte 0x0000ffff -_0807272C: .4byte gMPlayInfo_BGM -_08072730: .4byte gBattle_WIN0H -_08072734: .4byte gBattle_WIN0V -_08072738: .4byte gBattle_WIN1H -_0807273C: .4byte gBattle_WIN1V - thumb_func_end LaunchBattleAnimation - - thumb_func_start DestroyAnimSprite -DestroyAnimSprite: @ 8072740 - push {r4,lr} - adds r4, r0, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl DestroySprite - ldr r1, _0807275C @ =gAnimVisualTaskCount - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807275C: .4byte gAnimVisualTaskCount - thumb_func_end DestroyAnimSprite - - thumb_func_start DestroyAnimVisualTask -DestroyAnimVisualTask: @ 8072760 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _08072778 @ =gAnimVisualTaskCount - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08072778: .4byte gAnimVisualTaskCount - thumb_func_end DestroyAnimVisualTask - - thumb_func_start DestroyAnimSoundTask -DestroyAnimSoundTask: @ 807277C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _08072794 @ =gUnknown_2037EE3 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08072794: .4byte gUnknown_2037EE3 - thumb_func_end DestroyAnimSoundTask - - thumb_func_start AddSpriteIndex -AddSpriteIndex: @ 8072798 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r4, _080727B0 @ =0x0000ffff - ldr r1, _080727B4 @ =gUnknown_2037EEE -_080727A4: - ldrh r0, [r1] - cmp r0, r4 - bne _080727B8 - strh r3, [r1] - b _080727C0 - .align 2, 0 -_080727B0: .4byte 0x0000ffff -_080727B4: .4byte gUnknown_2037EEE -_080727B8: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, 0x7 - ble _080727A4 -_080727C0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end AddSpriteIndex - - thumb_func_start ClearSpriteIndex -ClearSpriteIndex: @ 80727C8 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r0, _080727E4 @ =0x0000ffff - adds r4, r0, 0 - ldr r1, _080727E8 @ =gUnknown_2037EEE -_080727D6: - ldrh r0, [r1] - cmp r0, r3 - bne _080727EC - orrs r0, r4 - strh r0, [r1] - b _080727F4 - .align 2, 0 -_080727E4: .4byte 0x0000ffff -_080727E8: .4byte gUnknown_2037EEE -_080727EC: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, 0x7 - ble _080727D6 -_080727F4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ClearSpriteIndex - - thumb_func_start WaitAnimFrameCount -WaitAnimFrameCount: @ 80727FC - push {lr} - ldr r2, _08072814 @ =gUnknown_2037EE0 - ldrb r1, [r2] - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r0, 0 - bgt _08072820 - ldr r0, _08072818 @ =gAnimScriptCallback - ldr r1, _0807281C @ =RunAnimScriptCommand - str r1, [r0] - movs r0, 0 - b _08072822 - .align 2, 0 -_08072814: .4byte gUnknown_2037EE0 -_08072818: .4byte gAnimScriptCallback -_0807281C: .4byte RunAnimScriptCommand -_08072820: - subs r0, r1, 0x1 -_08072822: - strb r0, [r2] - pop {r0} - bx r0 - thumb_func_end WaitAnimFrameCount - - thumb_func_start RunAnimScriptCommand -RunAnimScriptCommand: @ 8072828 - push {r4,lr} - ldr r4, _08072858 @ =gUnknown_83ADF5C -_0807282C: - ldr r0, _0807285C @ =gUnknown_2037ED4 - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _08072860 @ =gUnknown_2037EE0 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bne _08072850 - ldr r0, _08072864 @ =gAnimScriptActive - ldrb r0, [r0] - cmp r0, 0 - bne _0807282C -_08072850: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08072858: .4byte gUnknown_83ADF5C -_0807285C: .4byte gUnknown_2037ED4 -_08072860: .4byte gUnknown_2037EE0 -_08072864: .4byte gAnimScriptActive - thumb_func_end RunAnimScriptCommand - - thumb_func_start ScriptCmd_loadspritegfx -ScriptCmd_loadspritegfx: @ 8072868 - push {r4-r6,lr} - ldr r6, _080728B4 @ =gUnknown_2037ED4 - ldr r0, [r6] - adds r1, r0, 0x1 - str r1, [r6] - ldrb r4, [r0, 0x1] - ldrb r0, [r1, 0x1] - lsls r0, 8 - orrs r4, r0 - lsls r5, r4, 3 - ldr r0, _080728B8 @ =gUnknown_8399388 - adds r0, r5, r0 - bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _080728BC @ =gUnknown_8399C90 - adds r5, r0 - adds r0, r5, 0 - bl LoadCompressedSpritePaletteUsingHeap - ldr r0, [r6] - adds r0, 0x2 - str r0, [r6] - ldr r0, _080728C0 @ =0xffffd8f0 - adds r4, r0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r4, 0 - bl AddSpriteIndex - ldr r1, _080728C4 @ =gUnknown_2037EE0 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _080728C8 @ =gAnimScriptCallback - ldr r0, _080728CC @ =WaitAnimFrameCount - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080728B4: .4byte gUnknown_2037ED4 -_080728B8: .4byte gUnknown_8399388 -_080728BC: .4byte gUnknown_8399C90 -_080728C0: .4byte 0xffffd8f0 -_080728C4: .4byte gUnknown_2037EE0 -_080728C8: .4byte gAnimScriptCallback -_080728CC: .4byte WaitAnimFrameCount - thumb_func_end ScriptCmd_loadspritegfx - - thumb_func_start ScriptCmd_unloadspritegfx -ScriptCmd_unloadspritegfx: @ 80728D0 - push {r4-r6,lr} - ldr r6, _08072910 @ =gUnknown_2037ED4 - ldr r0, [r6] - adds r1, r0, 0x1 - str r1, [r6] - ldrb r4, [r0, 0x1] - ldrb r0, [r1, 0x1] - lsls r0, 8 - orrs r4, r0 - ldr r1, _08072914 @ =gUnknown_83ACC08 - ldr r0, _08072918 @ =0xffffd8f0 - adds r4, r0 - lsls r0, r4, 3 - adds r0, r1 - ldrh r5, [r0, 0x6] - adds r0, r5, 0 - bl FreeSpriteTilesByTag - adds r0, r5, 0 - bl FreeSpritePaletteByTag - ldr r0, [r6] - adds r0, 0x2 - str r0, [r6] - lsls r4, 16 - lsrs r4, 16 - adds r0, r4, 0 - bl ClearSpriteIndex - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08072910: .4byte gUnknown_2037ED4 -_08072914: .4byte gUnknown_83ACC08 -_08072918: .4byte 0xffffd8f0 - thumb_func_end ScriptCmd_unloadspritegfx - - thumb_func_start ScriptCmd_createsprite -ScriptCmd_createsprite: @ 807291C - push {r4-r7,lr} - ldr r5, _08072984 @ =gUnknown_2037ED4 - ldr r1, [r5] - adds r3, r1, 0x1 - str r3, [r5] - ldrb r2, [r1, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r3, 0x2] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r3, 0x3] - lsls r0, 24 - adds r7, r2, r0 - adds r0, r1, 0x5 - str r0, [r5] - ldrb r4, [r1, 0x5] - adds r0, r1, 0x6 - str r0, [r5] - ldrb r0, [r1, 0x6] - adds r1, 0x7 - str r1, [r5] - cmp r0, 0 - beq _0807296C - adds r6, r5, 0 - ldr r5, _08072988 @ =gBattleAnimArgs - adds r3, r0, 0 -_08072954: - ldr r2, [r6] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - strh r1, [r5] - adds r2, 0x2 - str r2, [r6] - adds r5, 0x2 - subs r3, 0x1 - cmp r3, 0 - bne _08072954 -_0807296C: - movs r0, 0x80 - ands r0, r4 - cmp r0, 0 - beq _0807299C - movs r0, 0x80 - eors r4, r0 - cmp r4, 0x3F - bls _0807298C - adds r0, r4, 0 - subs r0, 0x40 - b _0807298E - .align 2, 0 -_08072984: .4byte gUnknown_2037ED4 -_08072988: .4byte gBattleAnimArgs -_0807298C: - negs r0, r4 -_0807298E: - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08072998 @ =gBattleAnimTarget - b _080729AE - .align 2, 0 -_08072998: .4byte gBattleAnimTarget -_0807299C: - cmp r4, 0x3F - bls _080729A6 - adds r0, r4, 0 - subs r0, 0x40 - b _080729A8 -_080729A6: - negs r0, r4 -_080729A8: - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08072A04 @ =gBattleAnimAttacker -_080729AE: - ldrb r0, [r0] - bl GetBattlerSpriteSubpriority - lsls r0, 24 - lsrs r0, 24 - lsls r1, r4, 24 - asrs r1, 24 - adds r0, r1 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r0, r6, 16 - asrs r0, 16 - cmp r0, 0x2 - bgt _080729CC - movs r6, 0x3 -_080729CC: - ldr r5, _08072A08 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - lsls r3, r6, 24 - lsrs r3, 24 - adds r0, r7, 0 - adds r1, r4, 0 - bl CreateSpriteAndAnimate - ldr r1, _08072A0C @ =gAnimVisualTaskCount - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08072A04: .4byte gBattleAnimAttacker -_08072A08: .4byte gBattleAnimTarget -_08072A0C: .4byte gAnimVisualTaskCount - thumb_func_end ScriptCmd_createsprite - - thumb_func_start ScriptCmd_createvisualtask -ScriptCmd_createvisualtask: @ 8072A10 - push {r4-r7,lr} - ldr r4, _08072A80 @ =gUnknown_2037ED4 - ldr r1, [r4] - adds r3, r1, 0x1 - str r3, [r4] - ldrb r2, [r1, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r3, 0x2] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r3, 0x3] - lsls r0, 24 - adds r6, r2, r0 - adds r0, r1, 0x5 - str r0, [r4] - ldrb r7, [r1, 0x5] - adds r0, r1, 0x6 - str r0, [r4] - ldrb r0, [r1, 0x6] - adds r1, 0x7 - str r1, [r4] - cmp r0, 0 - beq _08072A60 - adds r5, r4, 0 - ldr r4, _08072A84 @ =gBattleAnimArgs - adds r3, r0, 0 -_08072A48: - ldr r2, [r5] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - strh r1, [r4] - adds r2, 0x2 - str r2, [r5] - adds r4, 0x2 - subs r3, 0x1 - cmp r3, 0 - bne _08072A48 -_08072A60: - adds r0, r6, 0 - adds r1, r7, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r6 - ldr r1, _08072A88 @ =gAnimVisualTaskCount - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08072A80: .4byte gUnknown_2037ED4 -_08072A84: .4byte gBattleAnimArgs -_08072A88: .4byte gAnimVisualTaskCount - thumb_func_end ScriptCmd_createvisualtask - - thumb_func_start ScriptCmd_delay -ScriptCmd_delay: @ 8072A8C - push {r4,lr} - ldr r1, _08072ABC @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r2, r0, 0x1 - str r2, [r1] - ldr r3, _08072AC0 @ =gUnknown_2037EE0 - ldrb r0, [r0, 0x1] - strb r0, [r3] - lsls r0, 24 - cmp r0, 0 - bne _08072AAA - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - strb r0, [r3] -_08072AAA: - adds r0, r2, 0x1 - str r0, [r1] - ldr r1, _08072AC4 @ =gAnimScriptCallback - ldr r0, _08072AC8 @ =WaitAnimFrameCount - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08072ABC: .4byte gUnknown_2037ED4 -_08072AC0: .4byte gUnknown_2037EE0 -_08072AC4: .4byte gAnimScriptCallback -_08072AC8: .4byte WaitAnimFrameCount - thumb_func_end ScriptCmd_delay - - thumb_func_start sub_8072ACC -sub_8072ACC: @ 8072ACC - push {lr} - ldr r0, _08072AE4 @ =gAnimVisualTaskCount - ldrb r2, [r0] - cmp r2, 0 - bne _08072AF0 - ldr r0, _08072AE8 @ =gUnknown_2037ED4 - ldr r1, [r0] - adds r1, 0x1 - str r1, [r0] - ldr r0, _08072AEC @ =gUnknown_2037EE0 - strb r2, [r0] - b _08072AF6 - .align 2, 0 -_08072AE4: .4byte gAnimVisualTaskCount -_08072AE8: .4byte gUnknown_2037ED4 -_08072AEC: .4byte gUnknown_2037EE0 -_08072AF0: - ldr r1, _08072AFC @ =gUnknown_2037EE0 - movs r0, 0x1 - strb r0, [r1] -_08072AF6: - pop {r0} - bx r0 - .align 2, 0 -_08072AFC: .4byte gUnknown_2037EE0 - thumb_func_end sub_8072ACC - - thumb_func_start nullsub_41 -nullsub_41: @ 8072B00 - bx lr - thumb_func_end nullsub_41 - - thumb_func_start nullsub_42 -nullsub_42: @ 8072B04 - bx lr - thumb_func_end nullsub_42 - - thumb_func_start sub_8072B08 -sub_8072B08: @ 8072B08 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r0, 0 - mov r8, r0 - ldr r0, _08072B38 @ =gAnimVisualTaskCount - ldrb r0, [r0] - cmp r0, 0 - bne _08072B30 - ldr r0, _08072B3C @ =gUnknown_2037EE3 - ldrb r0, [r0] - cmp r0, 0 - bne _08072B30 - ldr r1, _08072B40 @ =gUnknown_2037F14 - ldrb r0, [r1] - cmp r0, 0xFF - bne _08072B30 - ldrb r0, [r1, 0x1] - cmp r0, 0xFF - beq _08072B48 -_08072B30: - ldr r1, _08072B44 @ =gUnknown_2037F12 - movs r0, 0 - strh r0, [r1] - b _08072B62 - .align 2, 0 -_08072B38: .4byte gAnimVisualTaskCount -_08072B3C: .4byte gUnknown_2037EE3 -_08072B40: .4byte gUnknown_2037F14 -_08072B44: .4byte gUnknown_2037F12 -_08072B48: - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - beq _08072B80 - ldr r1, _08072B6C @ =gUnknown_2037F12 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x5A - bhi _08072B74 -_08072B62: - ldr r1, _08072B70 @ =gUnknown_2037EE0 - movs r0, 0x1 - strb r0, [r1] - b _08072BDC - .align 2, 0 -_08072B6C: .4byte gUnknown_2037F12 -_08072B70: .4byte gUnknown_2037EE0 -_08072B74: - ldr r0, _08072BE8 @ =gMPlayInfo_SE1 - bl m4aMPlayStop - ldr r0, _08072BEC @ =gMPlayInfo_SE2 - bl m4aMPlayStop -_08072B80: - ldr r1, _08072BF0 @ =gUnknown_2037F12 - movs r0, 0 - strh r0, [r1] - movs r5, 0 - ldr r7, _08072BF4 @ =0x0000ffff - ldr r6, _08072BF8 @ =gUnknown_83ACC08 - ldr r4, _08072BFC @ =gUnknown_2037EEE -_08072B8E: - ldrh r0, [r4] - cmp r0, r7 - beq _08072BB2 - lsls r0, 3 - adds r0, r6 - ldrh r0, [r0, 0x6] - bl FreeSpriteTilesByTag - ldrh r0, [r4] - lsls r0, 3 - adds r0, r6 - ldrh r0, [r0, 0x6] - bl FreeSpritePaletteByTag - ldrh r1, [r4] - adds r0, r7, 0 - orrs r0, r1 - strh r0, [r4] -_08072BB2: - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x7 - ble _08072B8E - mov r1, r8 - cmp r1, 0 - bne _08072BDC - ldr r0, _08072C00 @ =gMPlayInfo_BGM - ldr r1, _08072BF4 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - bl sub_80767F0 - movs r0, 0x1 - bl UpdateOamPriorityInAllHealthboxes - ldr r0, _08072C04 @ =gAnimScriptActive - mov r1, r8 - strb r1, [r0] -_08072BDC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08072BE8: .4byte gMPlayInfo_SE1 -_08072BEC: .4byte gMPlayInfo_SE2 -_08072BF0: .4byte gUnknown_2037F12 -_08072BF4: .4byte 0x0000ffff -_08072BF8: .4byte gUnknown_83ACC08 -_08072BFC: .4byte gUnknown_2037EEE -_08072C00: .4byte gMPlayInfo_BGM -_08072C04: .4byte gAnimScriptActive - thumb_func_end sub_8072B08 - - thumb_func_start sub_8072C08 -sub_8072C08: @ 8072C08 - push {r4,lr} - ldr r4, _08072C2C @ =gUnknown_2037ED4 - ldr r0, [r4] - adds r1, r0, 0x1 - str r1, [r4] - ldrb r0, [r0, 0x1] - ldrb r1, [r1, 0x1] - lsls r1, 8 - orrs r0, r1 - bl PlaySE - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08072C2C: .4byte gUnknown_2037ED4 - thumb_func_end sub_8072C08 - - thumb_func_start sub_8072C30 -sub_8072C30: @ 8072C30 - push {r4-r7,lr} - ldr r0, _08072C44 @ =gUnknown_2037ED4 - ldr r2, [r0] - adds r1, r2, 0x1 - str r1, [r0] - ldrb r6, [r2, 0x1] - cmp r6, 0 - bne _08072C48 - movs r6, 0x2 - b _08072C52 - .align 2, 0 -_08072C44: .4byte gUnknown_2037ED4 -_08072C48: - cmp r6, 0x1 - bne _08072C4E - movs r6, 0x3 -_08072C4E: - cmp r6, 0 - beq _08072C56 -_08072C52: - cmp r6, 0x2 - bne _08072C60 -_08072C56: - ldr r0, _08072C5C @ =gBattleAnimAttacker - b _08072C62 - .align 2, 0 -_08072C5C: .4byte gBattleAnimAttacker -_08072C60: - ldr r0, _08072CD8 @ =gBattleAnimTarget -_08072C62: - ldrb r5, [r0] - adds r0, r5, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08072D12 - adds r0, r5, 0 - bl GetBattlerPosition - lsls r0, 24 - movs r1, 0xFF - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - movs r7, 0x1 - cmp r0, 0x1 - bhi _08072C88 - movs r7, 0 -_08072C88: - adds r0, r5, 0 - adds r1, r7, 0 - bl MoveBattlerSpriteToBG - ldr r0, _08072CDC @ =gBattlerSpriteIds - adds r0, r5, r0 - ldrb r4, [r0] - ldr r0, _08072CE0 @ =task_pA_ma0A_obj_to_bg_pal - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _08072CE4 @ =gTasks - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - adds r2, r0, r1 - strh r4, [r2, 0x8] - ldr r1, _08072CE8 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0, 0x24] - ldrh r4, [r0, 0x20] - adds r1, r4 - strh r1, [r2, 0xA] - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r1, r0 - strh r1, [r2, 0xC] - cmp r7, 0 - bne _08072CF4 - ldr r0, _08072CEC @ =gBattle_BG1_X - ldrh r0, [r0] - strh r0, [r2, 0xE] - ldr r0, _08072CF0 @ =gBattle_BG1_Y - b _08072CFC - .align 2, 0 -_08072CD8: .4byte gBattleAnimTarget -_08072CDC: .4byte gBattlerSpriteIds -_08072CE0: .4byte task_pA_ma0A_obj_to_bg_pal -_08072CE4: .4byte gTasks -_08072CE8: .4byte gSprites -_08072CEC: .4byte gBattle_BG1_X -_08072CF0: .4byte gBattle_BG1_Y -_08072CF4: - ldr r0, _08072D8C @ =gBattle_BG2_X - ldrh r0, [r0] - strh r0, [r2, 0xE] - ldr r0, _08072D90 @ =gBattle_BG2_Y -_08072CFC: - ldrh r0, [r0] - strh r0, [r2, 0x10] - ldr r0, _08072D94 @ =gTasks - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 3 - adds r1, r0 - strh r7, [r1, 0x12] - strh r5, [r1, 0x14] - ldr r0, _08072D98 @ =gUnknown_2037F14 - strb r3, [r0] -_08072D12: - movs r0, 0x2 - eors r5, r0 - cmp r6, 0x1 - bls _08072DCE - adds r0, r5, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08072DCE - adds r0, r5, 0 - bl GetBattlerPosition - lsls r0, 24 - movs r1, 0xFF - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - movs r7, 0x1 - cmp r0, 0x1 - bhi _08072D3E - movs r7, 0 -_08072D3E: - adds r0, r5, 0 - adds r1, r7, 0 - bl MoveBattlerSpriteToBG - ldr r0, _08072D9C @ =gBattlerSpriteIds - adds r0, r5, r0 - ldrb r4, [r0] - ldr r0, _08072DA0 @ =task_pA_ma0A_obj_to_bg_pal - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _08072D94 @ =gTasks - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - adds r2, r0, r1 - strh r4, [r2, 0x8] - ldr r1, _08072DA4 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r0, 0x24] - ldrh r4, [r0, 0x20] - adds r1, r4 - strh r1, [r2, 0xA] - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r1, r0 - strh r1, [r2, 0xC] - cmp r7, 0 - bne _08072DB0 - ldr r0, _08072DA8 @ =gBattle_BG1_X - ldrh r0, [r0] - strh r0, [r2, 0xE] - ldr r0, _08072DAC @ =gBattle_BG1_Y - b _08072DB8 - .align 2, 0 -_08072D8C: .4byte gBattle_BG2_X -_08072D90: .4byte gBattle_BG2_Y -_08072D94: .4byte gTasks -_08072D98: .4byte gUnknown_2037F14 -_08072D9C: .4byte gBattlerSpriteIds -_08072DA0: .4byte task_pA_ma0A_obj_to_bg_pal -_08072DA4: .4byte gSprites -_08072DA8: .4byte gBattle_BG1_X -_08072DAC: .4byte gBattle_BG1_Y -_08072DB0: - ldr r0, _08072DDC @ =gBattle_BG2_X - ldrh r0, [r0] - strh r0, [r2, 0xE] - ldr r0, _08072DE0 @ =gBattle_BG2_Y -_08072DB8: - ldrh r0, [r0] - strh r0, [r2, 0x10] - ldr r0, _08072DE4 @ =gTasks - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 3 - adds r1, r0 - strh r7, [r1, 0x12] - strh r5, [r1, 0x14] - ldr r0, _08072DE8 @ =gUnknown_2037F14 - strb r3, [r0, 0x1] -_08072DCE: - ldr r1, _08072DEC @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08072DDC: .4byte gBattle_BG2_X -_08072DE0: .4byte gBattle_BG2_Y -_08072DE4: .4byte gTasks -_08072DE8: .4byte gUnknown_2037F14 -_08072DEC: .4byte gUnknown_2037ED4 - thumb_func_end sub_8072C30 - - thumb_func_start IsBattlerSpriteVisible -IsBattlerSpriteVisible: @ 8072DF0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsBattlerSpritePresent - lsls r0, 24 - cmp r0, 0 - beq _08072E40 - ldr r0, _08072E34 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r4, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08072E30 - ldr r2, _08072E38 @ =gSprites - ldr r0, _08072E3C @ =gBattlerSpriteIds - adds r0, r4, 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, 29 - cmp r0, 0 - blt _08072E40 -_08072E30: - movs r0, 0x1 - b _08072E42 - .align 2, 0 -_08072E34: .4byte gBattleSpritesDataPtr -_08072E38: .4byte gSprites -_08072E3C: .4byte gBattlerSpriteIds -_08072E40: - movs r0, 0 -_08072E42: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsBattlerSpriteVisible - - thumb_func_start MoveBattlerSpriteToBG -MoveBattlerSpriteToBG: @ 8072E48 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x28 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r4, 0 - beq _08072E5E - b _08072F84 -_08072E5E: - ldr r1, _08072F5C @ =0x06004000 - movs r2, 0x80 - lsls r2, 6 - movs r0, 0 - movs r3, 0x1 - bl RequestDma3Fill - ldr r1, _08072F60 @ =0x0600e000 - movs r2, 0x80 - lsls r2, 5 - movs r0, 0 - movs r3, 0x1 - bl RequestDma3Fill - add r0, sp, 0x10 - bl sub_80752A0 - add r0, sp, 0x20 - strh r4, [r0] - ldr r1, [sp, 0x10] - ldr r2, _08072F64 @ =0x01000800 - bl CpuSet - mov r0, sp - adds r0, 0x22 - strh r4, [r0] - ldr r1, [sp, 0x14] - ldr r2, _08072F68 @ =0x01000400 - bl CpuSet - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetAnimBgAttribute - ldr r2, _08072F6C @ =gBattlerSpriteIds - adds r2, r7, r2 - ldrb r0, [r2] - ldr r5, _08072F70 @ =gBattle_BG1_X - ldr r3, _08072F74 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrh r0, [r1, 0x24] - ldrh r4, [r1, 0x20] - adds r0, r4 - negs r0, r0 - adds r0, 0x20 - strh r0, [r5] - ldr r4, _08072F78 @ =gBattle_BG1_Y - ldrh r0, [r1, 0x26] - ldrh r1, [r1, 0x22] - adds r0, r1 - negs r0, r0 - adds r0, 0x20 - strh r0, [r4] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldrh r1, [r5] - movs r0, 0x14 - bl SetGpuReg - ldrh r1, [r4] - movs r0, 0x16 - bl SetGpuReg - lsls r4, r7, 5 - ldr r0, _08072F7C @ =gPlttBufferUnfaded + 0x200 - adds r4, r0 - add r0, sp, 0x10 - ldrb r1, [r0, 0x8] - lsls r1, 4 - adds r0, r4, 0 - movs r2, 0x20 - bl LoadPalette - add r0, sp, 0x10 - ldrb r1, [r0, 0x8] - lsls r1, 5 - movs r0, 0xA0 - lsls r0, 19 - adds r1, r0 - ldr r2, _08072F80 @ =0x04000008 - adds r0, r4, 0 - bl CpuSet - adds r0, r7, 0 - bl GetBattlerPosition - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - add r0, sp, 0x10 - ldrb r0, [r0, 0x8] - str r0, [sp] - ldr r0, [sp, 0x10] - str r0, [sp, 0x4] - ldr r0, [sp, 0x14] - str r0, [sp, 0x8] - add r0, sp, 0x10 - ldrh r0, [r0, 0xA] - str r0, [sp, 0xC] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl sub_80BCEF4 - b _08073086 - .align 2, 0 -_08072F5C: .4byte 0x06004000 -_08072F60: .4byte 0x0600e000 -_08072F64: .4byte 0x01000800 -_08072F68: .4byte 0x01000400 -_08072F6C: .4byte gBattlerSpriteIds -_08072F70: .4byte gBattle_BG1_X -_08072F74: .4byte gSprites -_08072F78: .4byte gBattle_BG1_Y -_08072F7C: .4byte gPlttBufferUnfaded + 0x200 -_08072F80: .4byte 0x04000008 -_08072F84: - ldr r1, _08073094 @ =0x06006000 - movs r2, 0x80 - lsls r2, 6 - movs r0, 0 - movs r3, 0x1 - bl RequestDma3Fill - ldr r1, _08073098 @ =0x0600f000 - movs r6, 0x80 - lsls r6, 5 - movs r0, 0 - adds r2, r6, 0 - movs r3, 0x1 - bl RequestDma3Fill - add r0, sp, 0x10 - movs r1, 0x2 - bl sub_80752C8 - add r0, sp, 0x24 - movs r4, 0 - strh r4, [r0] - ldr r1, [sp, 0x10] - adds r1, r6 - ldr r2, _0807309C @ =0x01000800 - bl CpuSet - mov r0, sp - adds r0, 0x26 - strh r4, [r0] - ldr r1, [sp, 0x14] - movs r2, 0x80 - lsls r2, 4 - mov r8, r2 - add r1, r8 - ldr r2, _080730A0 @ =0x01000400 - bl CpuSet - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetAnimBgAttribute - ldr r2, _080730A4 @ =gBattlerSpriteIds - adds r2, r7, r2 - ldrb r0, [r2] - ldr r5, _080730A8 @ =gBattle_BG2_X - ldr r3, _080730AC @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrh r0, [r1, 0x24] - ldrh r4, [r1, 0x20] - adds r0, r4 - negs r0, r0 - adds r0, 0x20 - strh r0, [r5] - ldr r4, _080730B0 @ =gBattle_BG2_Y - ldrh r0, [r1, 0x26] - ldrh r1, [r1, 0x22] - adds r0, r1 - negs r0, r0 - adds r0, 0x20 - strh r0, [r4] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldrh r1, [r5] - movs r0, 0x18 - bl SetGpuReg - ldrh r1, [r4] - movs r0, 0x1A - bl SetGpuReg - lsls r4, r7, 5 - ldr r0, _080730B4 @ =gPlttBufferUnfaded + 0x200 - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x90 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080730B8 @ =0x05000120 - ldr r2, _080730BC @ =0x04000008 - adds r0, r4, 0 - bl CpuSet - adds r0, r7, 0 - bl GetBattlerPosition - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - add r0, sp, 0x10 - ldrb r0, [r0, 0x8] - str r0, [sp] - ldr r0, [sp, 0x10] - adds r0, r6 - str r0, [sp, 0x4] - ldr r0, [sp, 0x14] - add r0, r8 - str r0, [sp, 0x8] - add r0, sp, 0x10 - ldrh r0, [r0, 0xA] - str r0, [sp, 0xC] - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl sub_80BCEF4 -_08073086: - add sp, 0x28 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073094: .4byte 0x06006000 -_08073098: .4byte 0x0600f000 -_0807309C: .4byte 0x01000800 -_080730A0: .4byte 0x01000400 -_080730A4: .4byte gBattlerSpriteIds -_080730A8: .4byte gBattle_BG2_X -_080730AC: .4byte gSprites -_080730B0: .4byte gBattle_BG2_Y -_080730B4: .4byte gPlttBufferUnfaded + 0x200 -_080730B8: .4byte 0x05000120 -_080730BC: .4byte 0x04000008 - thumb_func_end MoveBattlerSpriteToBG - - thumb_func_start sub_80730C0 -sub_80730C0: @ 80730C0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r12, r1 - adds r7, r2, 0 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r3, 24 - movs r0, 0x40 - mov r9, r0 - cmp r3, 0 - bne _080730DE - movs r1, 0x20 - mov r9, r1 -_080730DE: - lsls r0, r6, 28 - lsrs r6, r0, 16 - movs r0, 0 - cmp r0, r9 - bcs _08073116 - ldr r1, _08073124 @ =0x00000fff - mov r8, r1 -_080730EC: - movs r3, 0 - adds r5, r0, 0x1 - lsls r4, r0, 5 -_080730F2: - adds r1, r4, r3 - lsls r1, 1 - add r1, r12 - ldrh r2, [r1] - mov r0, r8 - ands r0, r2 - orrs r0, r6 - adds r0, r7 - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1F - bls _080730F2 - lsls r0, r5, 24 - lsrs r0, 24 - cmp r0, r9 - bcc _080730EC -_08073116: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073124: .4byte 0x00000fff - thumb_func_end sub_80730C0 - - thumb_func_start sub_8073128 -sub_8073128: @ 8073128 - push {r4,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - mov r0, sp - bl sub_80752A0 - cmp r4, 0 - bne _08073154 - movs r0, 0x1 - bl sub_8075358 - ldr r0, _0807314C @ =gBattle_BG1_X - strh r4, [r0] - ldr r0, _08073150 @ =gBattle_BG1_Y - strh r4, [r0] - b _08073164 - .align 2, 0 -_0807314C: .4byte gBattle_BG1_X -_08073150: .4byte gBattle_BG1_Y -_08073154: - movs r0, 0x2 - bl sub_8075358 - ldr r0, _0807316C @ =gBattle_BG2_X - movs r1, 0 - strh r1, [r0] - ldr r0, _08073170 @ =gBattle_BG2_Y - strh r1, [r0] -_08073164: - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807316C: .4byte gBattle_BG2_X -_08073170: .4byte gBattle_BG2_Y - thumb_func_end sub_8073128 - - thumb_func_start task_pA_ma0A_obj_to_bg_pal -task_pA_ma0A_obj_to_bg_pal: @ 8073174 - push {r4-r6,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080731F0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r5, r1, r2 - ldrb r4, [r5, 0x8] - ldrb r6, [r5, 0x14] - mov r0, sp - bl sub_80752A0 - ldr r0, _080731F4 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrh r2, [r1, 0x24] - ldrh r0, [r1, 0x20] - adds r2, r0 - ldrh r0, [r5, 0xA] - subs r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - ldrh r2, [r1, 0x26] - ldrh r1, [r1, 0x22] - adds r2, r1 - ldrh r0, [r5, 0xC] - subs r0, r2 - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0x12 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0807320C - ldr r1, _080731F8 @ =gBattle_BG1_X - lsls r0, r3, 16 - asrs r0, 16 - ldrh r3, [r5, 0xE] - adds r0, r3 - strh r0, [r1] - ldr r1, _080731FC @ =gBattle_BG1_Y - lsls r0, r2, 16 - asrs r0, 16 - ldrh r5, [r5, 0x10] - adds r0, r5 - strh r0, [r1] - lsls r0, r6, 5 - ldr r2, _08073200 @ =gPlttBufferFaded + 0x200 - adds r0, r2 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 5 - ldr r3, _08073204 @ =0xfffffe00 - adds r2, r3 - adds r1, r2 - ldr r2, _08073208 @ =0x04000008 - bl CpuSet - b _08073232 - .align 2, 0 -_080731F0: .4byte gTasks -_080731F4: .4byte gSprites -_080731F8: .4byte gBattle_BG1_X -_080731FC: .4byte gBattle_BG1_Y -_08073200: .4byte gPlttBufferFaded + 0x200 -_08073204: .4byte 0xfffffe00 -_08073208: .4byte 0x04000008 -_0807320C: - ldr r1, _0807323C @ =gBattle_BG2_X - lsls r0, r3, 16 - asrs r0, 16 - ldrh r3, [r5, 0xE] - adds r0, r3 - strh r0, [r1] - ldr r1, _08073240 @ =gBattle_BG2_Y - lsls r0, r2, 16 - asrs r0, 16 - ldrh r5, [r5, 0x10] - adds r0, r5 - strh r0, [r1] - lsls r0, r6, 5 - ldr r1, _08073244 @ =gPlttBufferFaded + 0x200 - adds r0, r1 - subs r1, 0xE0 - ldr r2, _08073248 @ =0x04000008 - bl CpuSet -_08073232: - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807323C: .4byte gBattle_BG2_X -_08073240: .4byte gBattle_BG2_Y -_08073244: .4byte gPlttBufferFaded + 0x200 -_08073248: .4byte 0x04000008 - thumb_func_end task_pA_ma0A_obj_to_bg_pal - - thumb_func_start ScriptCmd_clearmonbg -ScriptCmd_clearmonbg: @ 807324C - push {r4,r5,lr} - ldr r0, _08073260 @ =gUnknown_2037ED4 - ldr r2, [r0] - adds r1, r2, 0x1 - str r1, [r0] - ldrb r4, [r2, 0x1] - cmp r4, 0 - bne _08073264 - movs r4, 0x2 - b _0807326E - .align 2, 0 -_08073260: .4byte gUnknown_2037ED4 -_08073264: - cmp r4, 0x1 - bne _0807326A - movs r4, 0x3 -_0807326A: - cmp r4, 0 - beq _08073272 -_0807326E: - cmp r4, 0x2 - bne _0807327C -_08073272: - ldr r0, _08073278 @ =gBattleAnimAttacker - b _0807327E - .align 2, 0 -_08073278: .4byte gBattleAnimAttacker -_0807327C: - ldr r0, _080732D4 @ =gBattleAnimTarget -_0807327E: - ldrb r5, [r0] - ldr r3, _080732D8 @ =gUnknown_2037F14 - ldrb r0, [r3] - cmp r0, 0xFF - beq _080732A4 - ldr r2, _080732DC @ =gSprites - ldr r0, _080732E0 @ =gBattlerSpriteIds - adds r0, r5, r0 - ldrb r1, [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] -_080732A4: - cmp r4, 0x1 - bls _080732E4 - ldrb r0, [r3, 0x1] - cmp r0, 0xFF - beq _080732E4 - ldr r3, _080732DC @ =gSprites - ldr r2, _080732E0 @ =gBattlerSpriteIds - movs r1, 0x2 - adds r0, r5, 0 - eors r0, r1 - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - b _080732E6 - .align 2, 0 -_080732D4: .4byte gBattleAnimTarget -_080732D8: .4byte gUnknown_2037F14 -_080732DC: .4byte gSprites -_080732E0: .4byte gBattlerSpriteIds -_080732E4: - movs r4, 0 -_080732E6: - ldr r0, _08073310 @ =sub_807331C - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08073314 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x8] - strh r5, [r1, 0xC] - ldr r1, _08073318 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08073310: .4byte sub_807331C -_08073314: .4byte gTasks -_08073318: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_clearmonbg - - thumb_func_start sub_807331C -sub_807331C: @ 807331C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - adds r7, r0, 0 - ldr r1, _08073394 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - beq _0807338E - ldrb r0, [r4, 0xC] - bl GetBattlerPosition - lsls r0, 24 - movs r1, 0xFF - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - movs r5, 0x1 - cmp r0, 0x1 - bhi _08073354 - movs r5, 0 -_08073354: - ldr r6, _08073398 @ =gUnknown_2037F14 - ldrb r0, [r6] - cmp r0, 0xFF - beq _0807336C - adds r0, r5, 0 - bl sub_8073128 - ldrb r0, [r6] - bl DestroyTask - movs r0, 0xFF - strb r0, [r6] -_0807336C: - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - ble _08073388 - movs r0, 0x1 - eors r5, r0 - adds r0, r5, 0 - bl sub_8073128 - ldrb r0, [r6, 0x1] - bl DestroyTask - movs r0, 0xFF - strb r0, [r6, 0x1] -_08073388: - adds r0, r7, 0 - bl DestroyTask -_0807338E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073394: .4byte gTasks -_08073398: .4byte gUnknown_2037F14 - thumb_func_end sub_807331C - - thumb_func_start sub_807339C -sub_807339C: @ 807339C - push {r4,r5,lr} - ldr r0, _080733B0 @ =gUnknown_2037ED4 - ldr r2, [r0] - adds r1, r2, 0x1 - str r1, [r0] - ldrb r5, [r2, 0x1] - cmp r5, 0 - bne _080733B4 - movs r5, 0x2 - b _080733BE - .align 2, 0 -_080733B0: .4byte gUnknown_2037ED4 -_080733B4: - cmp r5, 0x1 - bne _080733BA - movs r5, 0x3 -_080733BA: - cmp r5, 0 - beq _080733C2 -_080733BE: - cmp r5, 0x2 - bne _080733CC -_080733C2: - ldr r0, _080733C8 @ =gBattleAnimAttacker - b _080733CE - .align 2, 0 -_080733C8: .4byte gBattleAnimAttacker -_080733CC: - ldr r0, _08073474 @ =gBattleAnimTarget -_080733CE: - ldrb r4, [r0] - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08073416 - adds r0, r4, 0 - bl GetBattlerPosition - lsls r0, 24 - movs r1, 0xFF - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - movs r1, 0x1 - cmp r0, 0x1 - bhi _080733F4 - movs r1, 0 -_080733F4: - adds r0, r4, 0 - bl MoveBattlerSpriteToBG - ldr r2, _08073478 @ =gSprites - ldr r0, _0807347C @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r1, [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] -_08073416: - movs r0, 0x2 - eors r4, r0 - cmp r5, 0x1 - bls _08073464 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08073464 - adds r0, r4, 0 - bl GetBattlerPosition - lsls r0, 24 - movs r1, 0xFF - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - movs r1, 0x1 - cmp r0, 0x1 - bhi _08073442 - movs r1, 0 -_08073442: - adds r0, r4, 0 - bl MoveBattlerSpriteToBG - ldr r2, _08073478 @ =gSprites - ldr r0, _0807347C @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r1, [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] -_08073464: - ldr r1, _08073480 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08073474: .4byte gBattleAnimTarget -_08073478: .4byte gSprites -_0807347C: .4byte gBattlerSpriteIds -_08073480: .4byte gUnknown_2037ED4 - thumb_func_end sub_807339C - - thumb_func_start sub_8073484 -sub_8073484: @ 8073484 - push {r4-r6,lr} - ldr r0, _08073498 @ =gUnknown_2037ED4 - ldr r2, [r0] - adds r1, r2, 0x1 - str r1, [r0] - ldrb r5, [r2, 0x1] - cmp r5, 0 - bne _0807349C - movs r5, 0x2 - b _080734A6 - .align 2, 0 -_08073498: .4byte gUnknown_2037ED4 -_0807349C: - cmp r5, 0x1 - bne _080734A2 - movs r5, 0x3 -_080734A2: - cmp r5, 0 - beq _080734AA -_080734A6: - cmp r5, 0x2 - bne _080734B4 -_080734AA: - ldr r0, _080734B0 @ =gBattleAnimAttacker - b _080734B6 - .align 2, 0 -_080734B0: .4byte gBattleAnimAttacker -_080734B4: - ldr r0, _08073514 @ =gBattleAnimTarget -_080734B6: - ldrb r6, [r0] - adds r0, r6, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080734E0 - ldr r2, _08073518 @ =gSprites - ldr r0, _0807351C @ =gBattlerSpriteIds - adds r0, r6, r0 - ldrb r1, [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] -_080734E0: - cmp r5, 0x1 - bls _08073520 - movs r0, 0x2 - adds r4, r6, 0 - eors r4, r0 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08073520 - ldr r2, _08073518 @ =gSprites - ldr r0, _0807351C @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r1, [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] - b _08073522 - .align 2, 0 -_08073514: .4byte gBattleAnimTarget -_08073518: .4byte gSprites -_0807351C: .4byte gBattlerSpriteIds -_08073520: - movs r5, 0 -_08073522: - ldr r0, _0807354C @ =sub_8073558 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08073550 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r5, [r1, 0x8] - strh r6, [r1, 0xC] - ldr r1, _08073554 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0807354C: .4byte sub_8073558 -_08073550: .4byte gTasks -_08073554: .4byte gUnknown_2037ED4 - thumb_func_end sub_8073484 - - thumb_func_start sub_8073558 -sub_8073558: @ 8073558 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _080735DC @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r5, r0, r1 - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - beq _080735D2 - ldrb r4, [r5, 0xC] - adds r6, r4, 0 - adds r0, r4, 0 - bl GetBattlerPosition - lsls r0, 24 - movs r1, 0xFF - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - movs r7, 0x1 - cmp r0, 0x1 - bhi _08073598 - movs r7, 0 -_08073598: - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080735AA - adds r0, r7, 0 - bl sub_8073128 -_080735AA: - movs r2, 0x8 - ldrsh r0, [r5, r2] - cmp r0, 0x1 - ble _080735CC - movs r0, 0x2 - eors r6, r0 - adds r0, r6, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080735CC - movs r0, 0x1 - eors r7, r0 - adds r0, r7, 0 - bl sub_8073128 -_080735CC: - mov r0, r8 - bl DestroyTask -_080735D2: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080735DC: .4byte gTasks - thumb_func_end sub_8073558 - - thumb_func_start ScriptCmd_setalpha -ScriptCmd_setalpha: @ 80735E0 - push {r4,r5,lr} - ldr r2, _08073614 @ =gUnknown_2037ED4 - ldr r0, [r2] - adds r1, r0, 0x1 - str r1, [r2] - ldrb r5, [r0, 0x1] - adds r0, r1, 0x1 - str r0, [r2] - ldrb r4, [r1, 0x1] - lsls r4, 8 - adds r0, 0x1 - str r0, [r2] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - orrs r5, r4 - movs r0, 0x52 - adds r1, r5, 0 - bl SetGpuReg - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08073614: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_setalpha - - thumb_func_start ScriptCmd_setbldcnt -ScriptCmd_setbldcnt: @ 8073618 - push {lr} - ldr r3, _0807363C @ =gUnknown_2037ED4 - ldr r0, [r3] - adds r2, r0, 0x1 - str r2, [r3] - ldrb r1, [r0, 0x1] - adds r0, r2, 0x1 - str r0, [r3] - ldrb r2, [r2, 0x1] - lsls r2, 8 - adds r0, 0x1 - str r0, [r3] - orrs r1, r2 - movs r0, 0x50 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_0807363C: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_setbldcnt - - thumb_func_start ScriptCmd_blendoff -ScriptCmd_blendoff: @ 8073640 - push {lr} - ldr r1, _08073660 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_08073660: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_blendoff - - thumb_func_start ScriptCmd_call -ScriptCmd_call: @ 8073664 - push {r4,lr} - ldr r4, _08073690 @ =gUnknown_2037ED4 - ldr r1, [r4] - adds r3, r1, 0x1 - str r3, [r4] - ldr r2, _08073694 @ =gUnknown_2037ED8 - adds r0, r1, 0x5 - str r0, [r2] - ldrb r1, [r1, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0x2] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0x3] - lsls r0, 24 - adds r1, r0 - str r1, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08073690: .4byte gUnknown_2037ED4 -_08073694: .4byte gUnknown_2037ED8 - thumb_func_end ScriptCmd_call - - thumb_func_start sub_8073698 -sub_8073698: @ 8073698 - ldr r0, _080736A4 @ =gUnknown_2037ED4 - ldr r1, _080736A8 @ =gUnknown_2037ED8 - ldr r1, [r1] - str r1, [r0] - bx lr - .align 2, 0 -_080736A4: .4byte gUnknown_2037ED4 -_080736A8: .4byte gUnknown_2037ED8 - thumb_func_end sub_8073698 - - thumb_func_start ScriptCmd_setarg -ScriptCmd_setarg: @ 80736AC - push {r4,r5,lr} - ldr r5, _080736D8 @ =gUnknown_2037ED4 - ldr r1, [r5] - adds r0, r1, 0x1 - str r0, [r5] - ldrb r2, [r1, 0x1] - adds r3, r0, 0x1 - str r3, [r5] - ldrb r4, [r0, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r4, r0 - adds r1, 0x4 - str r1, [r5] - ldr r0, _080736DC @ =gBattleAnimArgs - lsls r2, 1 - adds r2, r0 - strh r4, [r2] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080736D8: .4byte gUnknown_2037ED4 -_080736DC: .4byte gBattleAnimArgs - thumb_func_end ScriptCmd_setarg - - thumb_func_start ScriptCmd_choosetwoturnanim -ScriptCmd_choosetwoturnanim: @ 80736E0 - push {lr} - ldr r3, _08073718 @ =gUnknown_2037ED4 - ldr r2, [r3] - adds r0, r2, 0x1 - str r0, [r3] - ldr r0, _0807371C @ =gAnimMoveTurn - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080736FA - adds r0, r2, 0x5 - str r0, [r3] -_080736FA: - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - adds r1, r0 - str r1, [r3] - pop {r0} - bx r0 - .align 2, 0 -_08073718: .4byte gUnknown_2037ED4 -_0807371C: .4byte gAnimMoveTurn - thumb_func_end ScriptCmd_choosetwoturnanim - - thumb_func_start ScriptCmd_jumpifmoveturn -ScriptCmd_jumpifmoveturn: @ 8073720 - push {r4,r5,lr} - ldr r5, _08073750 @ =gUnknown_2037ED4 - ldr r4, [r5] - adds r2, r4, 0x1 - str r2, [r5] - ldrb r1, [r4, 0x1] - adds r3, r2, 0x1 - str r3, [r5] - ldr r0, _08073754 @ =gAnimMoveTurn - ldrb r0, [r0] - cmp r1, r0 - bne _08073758 - ldrb r1, [r2, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0x2] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0x3] - lsls r0, 24 - adds r1, r0 - str r1, [r5] - b _0807375C - .align 2, 0 -_08073750: .4byte gUnknown_2037ED4 -_08073754: .4byte gAnimMoveTurn -_08073758: - adds r0, r4, 0x6 - str r0, [r5] -_0807375C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ScriptCmd_jumpifmoveturn - - thumb_func_start ScriptCmd_jump -ScriptCmd_jump: @ 8073764 - ldr r3, _08073784 @ =gUnknown_2037ED4 - ldr r0, [r3] - adds r2, r0, 0x1 - str r2, [r3] - ldrb r1, [r0, 0x1] - ldrb r0, [r2, 0x1] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - adds r1, r0 - str r1, [r3] - bx lr - .align 2, 0 -_08073784: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_jump - - thumb_func_start IsContest -IsContest: @ 8073788 - movs r0, 0 - bx lr - thumb_func_end IsContest - - thumb_func_start sub_807378C -sub_807378C: @ 807378C - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC9 - beq _0807379A - movs r0, 0x1 - b _0807379C -_0807379A: - movs r0, 0 -_0807379C: - pop {r1} - bx r1 - thumb_func_end sub_807378C - - thumb_func_start sub_80737A0 -sub_80737A0: @ 80737A0 - push {r4,lr} - ldr r1, _080737D4 @ =gUnknown_2037ED4 - ldr r2, [r1] - adds r0, r2, 0x1 - str r0, [r1] - ldrb r4, [r2, 0x1] - adds r0, 0x1 - str r0, [r1] - ldr r0, _080737D8 @ =sub_8073850 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080737DC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x8] - ldr r1, _080737E0 @ =gUnknown_2037F17 - movs r0, 0x1 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080737D4: .4byte gUnknown_2037ED4 -_080737D8: .4byte sub_8073850 -_080737DC: .4byte gTasks -_080737E0: .4byte gUnknown_2037F17 - thumb_func_end sub_80737A0 - - thumb_func_start sub_80737E4 -sub_80737E4: @ 80737E4 - push {r4-r6,lr} - ldr r1, _08073820 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r2, r0, 0x1 - str r2, [r1] - ldrb r6, [r0, 0x1] - ldrb r5, [r2, 0x1] - adds r0, 0x4 - str r0, [r1] - ldr r0, _08073824 @ =sub_8073850 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08073828 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08073830 - ldr r1, _0807382C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - strh r5, [r0, 0x8] - b _0807383C - .align 2, 0 -_08073820: .4byte gUnknown_2037ED4 -_08073824: .4byte sub_8073850 -_08073828: .4byte gBattleAnimTarget -_0807382C: .4byte gTasks -_08073830: - ldr r1, _08073848 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - strh r6, [r0, 0x8] -_0807383C: - ldr r1, _0807384C @ =gUnknown_2037F17 - movs r0, 0x1 - strb r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08073848: .4byte gTasks -_0807384C: .4byte gUnknown_2037F17 - thumb_func_end sub_80737E4 - - thumb_func_start sub_8073850 -sub_8073850: @ 8073850 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08073884 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r6, [r4, 0x1C] - movs r0, 0x1C - ldrsh r3, [r4, r0] - adds r7, r1, 0 - cmp r3, 0 - bne _08073888 - str r3, [sp] - movs r0, 0xE8 - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginHardwarePaletteFade - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - b _08073918 - .align 2, 0 -_08073884: .4byte gTasks -_08073888: - ldr r2, _080738A4 @ =gPaletteFade - ldrb r1, [r2, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08073918 - cmp r3, 0x1 - bne _080738AC - adds r0, r6, 0x1 - strh r0, [r4, 0x1C] - ldr r1, _080738A8 @ =gUnknown_2037F17 - movs r0, 0x2 - strb r0, [r1] - b _080738F0 - .align 2, 0 -_080738A4: .4byte gPaletteFade -_080738A8: .4byte gUnknown_2037F17 -_080738AC: - cmp r3, 0x2 - bne _080738F0 - ldrh r0, [r4, 0x8] - lsls r2, r0, 16 - asrs r1, r2, 16 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080738C4 - bl sub_807396C - b _080738CA -_080738C4: - lsrs r0, r2, 16 - bl sub_8073924 -_080738CA: - movs r0, 0x1 - str r0, [sp] - movs r0, 0xE8 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginHardwarePaletteFade - ldr r1, _080738EC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x1C] - adds r1, 0x1 - strh r1, [r0, 0x1C] - b _08073918 - .align 2, 0 -_080738EC: .4byte gTasks -_080738F0: - ldrb r1, [r2, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08073918 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r7 - movs r1, 0x1C - ldrsh r0, [r0, r1] - cmp r0, 0x3 - bne _08073918 - adds r0, r5, 0 - bl DestroyTask - ldr r0, _08073920 @ =gUnknown_2037F17 - strb r4, [r0] -_08073918: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073920: .4byte gUnknown_2037F17 - thumb_func_end sub_8073850 - - thumb_func_start sub_8073924 -sub_8073924: @ 8073924 - push {r4,r5,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r5, _08073960 @ =gUnknown_83ADE18 - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 2 - adds r0, r5, 0 - adds r0, 0x8 - adds r0, r4, r0 - ldr r0, [r0] - ldr r1, _08073964 @ =0x0600d000 - bl LZDecompressVram - adds r0, r4, r5 - ldr r0, [r0] - ldr r1, _08073968 @ =0x06008000 - bl LZDecompressVram - adds r5, 0x4 - adds r4, r5 - ldr r0, [r4] - movs r1, 0x20 - movs r2, 0x20 - bl LoadCompressedPalette - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08073960: .4byte gUnknown_83ADE18 -_08073964: .4byte 0x0600d000 -_08073968: .4byte 0x06008000 - thumb_func_end sub_8073924 - - thumb_func_start sub_807396C -sub_807396C: @ 807396C - push {lr} - bl sub_800F40C - pop {r0} - bx r0 - thumb_func_end sub_807396C - - thumb_func_start ScriptCmd_restorebg -ScriptCmd_restorebg: @ 8073978 - push {lr} - ldr r1, _080739A8 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - ldr r0, _080739AC @ =sub_8073850 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080739B0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080739B4 @ =0x0000ffff - strh r0, [r1, 0x8] - ldr r1, _080739B8 @ =gUnknown_2037F17 - movs r0, 0x1 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080739A8: .4byte gUnknown_2037ED4 -_080739AC: .4byte sub_8073850 -_080739B0: .4byte gTasks -_080739B4: .4byte 0x0000ffff -_080739B8: .4byte gUnknown_2037F17 - thumb_func_end ScriptCmd_restorebg - - thumb_func_start ScriptCmd_waitbgfadeout -ScriptCmd_waitbgfadeout: @ 80739BC - push {lr} - ldr r0, _080739D4 @ =gUnknown_2037F17 - ldrb r0, [r0] - cmp r0, 0x2 - bne _080739E0 - ldr r1, _080739D8 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - ldr r1, _080739DC @ =gUnknown_2037EE0 - movs r0, 0 - b _080739E4 - .align 2, 0 -_080739D4: .4byte gUnknown_2037F17 -_080739D8: .4byte gUnknown_2037ED4 -_080739DC: .4byte gUnknown_2037EE0 -_080739E0: - ldr r1, _080739EC @ =gUnknown_2037EE0 - movs r0, 0x1 -_080739E4: - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080739EC: .4byte gUnknown_2037EE0 - thumb_func_end ScriptCmd_waitbgfadeout - - thumb_func_start sub_80739F0 -sub_80739F0: @ 80739F0 - push {lr} - ldr r0, _08073A08 @ =gUnknown_2037F17 - ldrb r2, [r0] - cmp r2, 0 - bne _08073A14 - ldr r0, _08073A0C @ =gUnknown_2037ED4 - ldr r1, [r0] - adds r1, 0x1 - str r1, [r0] - ldr r0, _08073A10 @ =gUnknown_2037EE0 - strb r2, [r0] - b _08073A1A - .align 2, 0 -_08073A08: .4byte gUnknown_2037F17 -_08073A0C: .4byte gUnknown_2037ED4 -_08073A10: .4byte gUnknown_2037EE0 -_08073A14: - ldr r1, _08073A20 @ =gUnknown_2037EE0 - movs r0, 0x1 - strb r0, [r1] -_08073A1A: - pop {r0} - bx r0 - .align 2, 0 -_08073A20: .4byte gUnknown_2037EE0 - thumb_func_end sub_80739F0 - - thumb_func_start ScriptCmd_changebg -ScriptCmd_changebg: @ 8073A24 - push {r4,lr} - ldr r4, _08073A40 @ =gUnknown_2037ED4 - ldr r1, [r4] - adds r0, r1, 0x1 - str r0, [r4] - ldrb r0, [r1, 0x1] - bl sub_8073924 - ldr r0, [r4] - adds r0, 0x1 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08073A40: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_changebg - - thumb_func_start BattleAnimAdjustPanning -BattleAnimAdjustPanning: @ 8073A44 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08073A78 @ =gBattleSpritesDataPtr - ldr r1, [r0] - ldr r0, _08073A7C @ =gBattleAnimAttacker - ldrb r2, [r0] - ldr r1, [r1, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08073A80 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - movs r4, 0xC0 - cmp r0, 0 - beq _08073AE6 - movs r4, 0x3F - b _08073AE6 - .align 2, 0 -_08073A78: .4byte gBattleSpritesDataPtr -_08073A7C: .4byte gBattleAnimAttacker -_08073A80: - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08073ABA - ldr r0, _08073AA8 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08073AE6 - lsls r0, r4, 24 - asrs r1, r0, 24 - cmp r1, 0x3F - bne _08073AAC - movs r4, 0xC0 - b _08073AE6 - .align 2, 0 -_08073AA8: .4byte gBattleAnimTarget -_08073AAC: - movs r0, 0x40 - negs r0, r0 - cmp r1, r0 - beq _08073AE6 - negs r0, r1 - lsls r0, 24 - b _08073AE4 -_08073ABA: - ldr r0, _08073ADC @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08073AE0 - lsls r0, r4, 24 - asrs r0, 24 - movs r1, 0x40 - negs r1, r1 - cmp r0, r1 - bne _08073AE6 - movs r4, 0x3F - b _08073AE6 - .align 2, 0 -_08073ADC: .4byte gBattleAnimTarget -_08073AE0: - lsls r0, r4, 24 - negs r0, r0 -_08073AE4: - lsrs r4, r0, 24 -_08073AE6: - lsls r0, r4, 24 - asrs r1, r0, 24 - cmp r1, 0x3F - ble _08073AF2 - movs r4, 0x3F - b _08073AFC -_08073AF2: - movs r0, 0x40 - negs r0, r0 - cmp r1, r0 - bge _08073AFC - movs r4, 0xC0 -_08073AFC: - lsls r0, r4, 24 - asrs r0, 24 - pop {r4} - pop {r1} - bx r1 - thumb_func_end BattleAnimAdjustPanning - - thumb_func_start BattleAnimAdjustPanning2 -BattleAnimAdjustPanning2: @ 8073B08 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08073B3C @ =gBattleSpritesDataPtr - ldr r1, [r0] - ldr r0, _08073B40 @ =gBattleAnimAttacker - ldrb r2, [r0] - ldr r1, [r1, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08073B44 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - movs r4, 0xC0 - cmp r0, 0 - beq _08073B56 - movs r4, 0x3F - b _08073B56 - .align 2, 0 -_08073B3C: .4byte gBattleSpritesDataPtr -_08073B40: .4byte gBattleAnimAttacker -_08073B44: - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08073B56 - lsls r0, r4, 24 - negs r0, r0 - lsrs r4, r0, 24 -_08073B56: - lsls r0, r4, 24 - asrs r0, 24 - pop {r4} - pop {r1} - bx r1 - thumb_func_end BattleAnimAdjustPanning2 - - thumb_func_start KeepPanInRange -KeepPanInRange: @ 8073B60 - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - asrs r2, r0, 16 - cmp r2, 0x3F - ble _08073B70 - movs r1, 0x3F - b _08073B7A -_08073B70: - movs r0, 0x40 - negs r0, r0 - cmp r2, r0 - bge _08073B7A - ldr r1, _08073B84 @ =0x0000ffc0 -_08073B7A: - lsls r0, r1, 16 - asrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_08073B84: .4byte 0x0000ffc0 - thumb_func_end KeepPanInRange - - thumb_func_start CalculatePanIncrement -CalculatePanIncrement: @ 8073B88 - push {lr} - lsls r2, 16 - lsrs r2, 16 - adds r3, r2, 0 - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bge _08073BA6 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0 - bge _08073BB6 - b _08073BB4 -_08073BA6: - cmp r0, r1 - ble _08073BBC - lsls r0, r3, 16 - asrs r0, 16 - cmp r0, 0 - bge _08073BB4 - negs r0, r0 -_08073BB4: - negs r0, r0 -_08073BB6: - lsls r0, 16 - lsrs r0, 16 - b _08073BBE -_08073BBC: - movs r0, 0 -_08073BBE: - lsls r0, 16 - asrs r0, 16 - pop {r1} - bx r1 - thumb_func_end CalculatePanIncrement - - thumb_func_start ScriptCmd_playsewithpan -ScriptCmd_playsewithpan: @ 8073BC8 - push {r4,r5,lr} - ldr r5, _08073BFC @ =gUnknown_2037ED4 - ldr r0, [r5] - adds r1, r0, 0x1 - str r1, [r5] - ldrb r4, [r0, 0x1] - ldrb r0, [r1, 0x1] - lsls r0, 8 - orrs r4, r0 - movs r0, 0x2 - ldrsb r0, [r1, r0] - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - adds r0, r4, 0 - bl PlaySE12WithPanning - ldr r0, [r5] - adds r0, 0x3 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08073BFC: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_playsewithpan - - thumb_func_start ScriptCmd_setpan -ScriptCmd_setpan: @ 8073C00 - push {r4,lr} - ldr r4, _08073C28 @ =gUnknown_2037ED4 - ldr r1, [r4] - adds r0, r1, 0x1 - str r0, [r4] - movs r0, 0x1 - ldrsb r0, [r1, r0] - bl BattleAnimAdjustPanning - lsls r0, 24 - asrs r0, 24 - bl SE12PanpotControl - ldr r0, [r4] - adds r0, 0x1 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08073C28: .4byte gUnknown_2037ED4 - thumb_func_end ScriptCmd_setpan - - thumb_func_start ScriptCmd_panse_1B -ScriptCmd_panse_1B: @ 8073C2C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _08073CDC @ =gUnknown_2037ED4 - mov r10, r0 - ldr r0, [r0] - adds r1, r0, 0x1 - mov r2, r10 - str r1, [r2] - ldrb r0, [r0, 0x1] - mov r9, r0 - ldrb r0, [r1, 0x1] - lsls r0, 8 - mov r2, r9 - orrs r2, r0 - mov r9, r2 - ldrb r4, [r1, 0x3] - ldrb r6, [r1, 0x4] - ldrb r7, [r1, 0x5] - movs r0, 0x2 - ldrsb r0, [r1, r0] - bl BattleAnimAdjustPanning - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, 24 - asrs r4, 24 - adds r0, r4, 0 - bl BattleAnimAdjustPanning - mov r8, r0 - lsls r5, 24 - asrs r5, 24 - mov r0, r8 - lsls r0, 24 - asrs r0, 24 - mov r8, r0 - lsls r6, 24 - asrs r6, 24 - adds r0, r5, 0 - mov r1, r8 - adds r2, r6, 0 - bl CalculatePanIncrement - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08073CE0 @ =Task_PanFromInitialToTarget - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08073CE4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r5, [r1, 0x8] - mov r2, r8 - strh r2, [r1, 0xA] - lsls r4, 24 - asrs r4, 24 - strh r4, [r1, 0xC] - strh r7, [r1, 0xE] - strh r5, [r1, 0x10] - mov r0, r9 - adds r1, r5, 0 - bl PlaySE12WithPanning - ldr r1, _08073CE8 @ =gUnknown_2037EE3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - mov r1, r10 - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073CDC: .4byte gUnknown_2037ED4 -_08073CE0: .4byte Task_PanFromInitialToTarget -_08073CE4: .4byte gTasks -_08073CE8: .4byte gUnknown_2037EE3 - thumb_func_end ScriptCmd_panse_1B - - thumb_func_start Task_PanFromInitialToTarget -Task_PanFromInitialToTarget: @ 8073CEC - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r7, 0 - ldr r1, _08073D30 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0x18] - adds r1, r0, 0x1 - strh r1, [r2, 0x18] - lsls r0, 16 - asrs r0, 16 - movs r3, 0xE - ldrsh r1, [r2, r3] - cmp r0, r1 - blt _08073D70 - strh r7, [r2, 0x18] - ldrh r6, [r2, 0x8] - ldrh r3, [r2, 0xA] - movs r4, 0x10 - ldrsh r0, [r2, r4] - movs r4, 0xC - ldrsh r1, [r2, r4] - adds r0, r1 - lsls r0, 16 - lsrs r4, r0, 16 - strh r4, [r2, 0x10] - cmp r1, 0 - bne _08073D34 - lsls r2, r3, 16 - b _08073D58 - .align 2, 0 -_08073D30: .4byte gTasks -_08073D34: - lsls r1, r6, 16 - lsls r0, r3, 16 - asrs r3, r0, 16 - adds r2, r0, 0 - cmp r1, r2 - bge _08073D4A - lsls r0, r4, 16 - asrs r0, 16 - cmp r0, r3 - blt _08073D54 - b _08073D58 -_08073D4A: - lsls r0, r4, 16 - asrs r0, 16 - cmp r0, r3 - bgt _08073D54 - movs r7, 0x1 -_08073D54: - cmp r7, 0 - beq _08073D68 -_08073D58: - lsrs r4, r2, 16 - adds r0, r5, 0 - bl DestroyTask - ldr r1, _08073D78 @ =gUnknown_2037EE3 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_08073D68: - lsls r0, r4, 24 - asrs r0, 24 - bl SE12PanpotControl -_08073D70: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073D78: .4byte gUnknown_2037EE3 - thumb_func_end Task_PanFromInitialToTarget - - thumb_func_start ScriptCmd_panse_26 -ScriptCmd_panse_26: @ 8073D7C - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - ldr r0, _08073E00 @ =gUnknown_2037ED4 - mov r9, r0 - ldr r0, [r0] - adds r1, r0, 0x1 - mov r2, r9 - str r1, [r2] - ldrb r0, [r0, 0x1] - mov r8, r0 - ldrb r0, [r1, 0x1] - lsls r0, 8 - mov r2, r8 - orrs r2, r0 - mov r8, r2 - ldrb r4, [r1, 0x2] - ldrb r5, [r1, 0x3] - ldrb r6, [r1, 0x4] - ldrb r1, [r1, 0x5] - mov r10, r1 - ldr r0, _08073E04 @ =Task_PanFromInitialToTarget - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08073E08 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - lsls r4, 24 - asrs r4, 24 - strh r4, [r1, 0x8] - lsls r5, 24 - asrs r5, 24 - strh r5, [r1, 0xA] - lsls r6, 24 - asrs r6, 24 - strh r6, [r1, 0xC] - mov r0, r10 - strh r0, [r1, 0xE] - strh r4, [r1, 0x10] - mov r0, r8 - adds r1, r4, 0 - bl PlaySE12WithPanning - ldr r1, _08073E0C @ =gUnknown_2037EE3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - mov r1, r9 - ldr r0, [r1] - adds r0, 0x6 - str r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08073E00: .4byte gUnknown_2037ED4 -_08073E04: .4byte Task_PanFromInitialToTarget -_08073E08: .4byte gTasks -_08073E0C: .4byte gUnknown_2037EE3 - thumb_func_end ScriptCmd_panse_26 - - thumb_func_start ScriptCmd_panse_27 -ScriptCmd_panse_27: @ 8073E10 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _08073EC0 @ =gUnknown_2037ED4 - mov r10, r0 - ldr r0, [r0] - adds r1, r0, 0x1 - mov r2, r10 - str r1, [r2] - ldrb r0, [r0, 0x1] - mov r9, r0 - ldrb r0, [r1, 0x1] - lsls r0, 8 - mov r2, r9 - orrs r2, r0 - mov r9, r2 - ldrb r4, [r1, 0x3] - ldrb r0, [r1, 0x4] - mov r8, r0 - ldrb r7, [r1, 0x5] - movs r0, 0x2 - ldrsb r0, [r1, r0] - bl BattleAnimAdjustPanning2 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - asrs r4, 24 - adds r0, r4, 0 - bl BattleAnimAdjustPanning2 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - mov r1, r8 - lsls r1, 24 - asrs r1, 24 - mov r8, r1 - mov r0, r8 - bl BattleAnimAdjustPanning2 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08073EC4 @ =Task_PanFromInitialToTarget - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08073EC8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - lsls r6, 24 - asrs r6, 24 - strh r6, [r1, 0x8] - lsls r5, 24 - asrs r5, 24 - strh r5, [r1, 0xA] - lsls r4, 24 - asrs r4, 24 - strh r4, [r1, 0xC] - strh r7, [r1, 0xE] - strh r6, [r1, 0x10] - mov r0, r9 - adds r1, r6, 0 - bl PlaySE12WithPanning - ldr r1, _08073ECC @ =gUnknown_2037EE3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - mov r2, r10 - ldr r0, [r2] - adds r0, 0x6 - str r0, [r2] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073EC0: .4byte gUnknown_2037ED4 -_08073EC4: .4byte Task_PanFromInitialToTarget -_08073EC8: .4byte gTasks -_08073ECC: .4byte gUnknown_2037EE3 - thumb_func_end ScriptCmd_panse_27 - - thumb_func_start ScriptCmd_loopsewithpan -ScriptCmd_loopsewithpan: @ 8073ED0 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - ldr r6, _08073F48 @ =gUnknown_2037ED4 - ldr r0, [r6] - adds r1, r0, 0x1 - str r1, [r6] - ldrb r5, [r0, 0x1] - ldrb r0, [r1, 0x1] - lsls r0, 8 - orrs r5, r0 - ldrb r0, [r1, 0x3] - mov r8, r0 - ldrb r2, [r1, 0x4] - mov r9, r2 - movs r0, 0x2 - ldrsb r0, [r1, r0] - bl BattleAnimAdjustPanning - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08073F4C @ =Task_LoopAndPlaySE - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08073F50 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r5, [r1, 0x8] - lsls r4, 24 - asrs r4, 24 - strh r4, [r1, 0xA] - mov r2, r8 - strh r2, [r1, 0xC] - mov r2, r9 - strh r2, [r1, 0xE] - mov r2, r8 - strh r2, [r1, 0x18] - ldr r1, [r1] - bl _call_via_r1 - ldr r1, _08073F54 @ =gUnknown_2037EE3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r6] - adds r0, 0x5 - str r0, [r6] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08073F48: .4byte gUnknown_2037ED4 -_08073F4C: .4byte Task_LoopAndPlaySE -_08073F50: .4byte gTasks -_08073F54: .4byte gUnknown_2037EE3 - thumb_func_end ScriptCmd_loopsewithpan - - thumb_func_start Task_LoopAndPlaySE -Task_LoopAndPlaySE: @ 8073F58 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _08073FAC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0x18] - adds r1, r0, 0x1 - strh r1, [r2, 0x18] - lsls r0, 16 - asrs r0, 16 - movs r3, 0xC - ldrsh r1, [r2, r3] - cmp r0, r1 - blt _08073FA6 - movs r0, 0 - strh r0, [r2, 0x18] - ldrh r0, [r2, 0x8] - ldrb r1, [r2, 0xA] - ldrh r4, [r2, 0xE] - subs r4, 0x1 - strh r4, [r2, 0xE] - lsls r4, 24 - lsrs r4, 24 - lsls r1, 24 - asrs r1, 24 - bl PlaySE12WithPanning - cmp r4, 0 - bne _08073FA6 - adds r0, r5, 0 - bl DestroyTask - ldr r1, _08073FB0 @ =gUnknown_2037EE3 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_08073FA6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08073FAC: .4byte gTasks -_08073FB0: .4byte gUnknown_2037EE3 - thumb_func_end Task_LoopAndPlaySE - - thumb_func_start ScriptCmd_waitplaysewithpan -ScriptCmd_waitplaysewithpan: @ 8073FB4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r6, _08074018 @ =gUnknown_2037ED4 - ldr r0, [r6] - adds r1, r0, 0x1 - str r1, [r6] - ldrb r5, [r0, 0x1] - ldrb r0, [r1, 0x1] - lsls r0, 8 - orrs r5, r0 - ldrb r0, [r1, 0x3] - mov r8, r0 - movs r0, 0x2 - ldrsb r0, [r1, r0] - bl BattleAnimAdjustPanning - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0807401C @ =Task_WaitAndPlaySE - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08074020 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r5, [r1, 0x8] - lsls r4, 24 - asrs r4, 24 - strh r4, [r1, 0xA] - mov r0, r8 - strh r0, [r1, 0xC] - ldr r1, _08074024 @ =gUnknown_2037EE3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r6] - adds r0, 0x4 - str r0, [r6] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08074018: .4byte gUnknown_2037ED4 -_0807401C: .4byte Task_WaitAndPlaySE -_08074020: .4byte gTasks -_08074024: .4byte gUnknown_2037EE3 - thumb_func_end ScriptCmd_waitplaysewithpan - - thumb_func_start Task_WaitAndPlaySE -Task_WaitAndPlaySE: @ 8074028 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _08074064 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0xC] - subs r1, r0, 0x1 - strh r1, [r2, 0xC] - lsls r0, 16 - cmp r0, 0 - bgt _0807405C - ldrh r0, [r2, 0x8] - movs r1, 0xA - ldrsb r1, [r2, r1] - bl PlaySE12WithPanning - adds r0, r4, 0 - bl DestroyTask - ldr r1, _08074068 @ =gUnknown_2037EE3 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_0807405C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08074064: .4byte gTasks -_08074068: .4byte gUnknown_2037EE3 - thumb_func_end Task_WaitAndPlaySE - - thumb_func_start ScriptCmd_createsoundtask -ScriptCmd_createsoundtask: @ 807406C - push {r4-r6,lr} - ldr r4, _080740D4 @ =gUnknown_2037ED4 - ldr r1, [r4] - adds r3, r1, 0x1 - str r3, [r4] - ldrb r2, [r1, 0x1] - ldrb r0, [r3, 0x1] - lsls r0, 8 - adds r2, r0 - ldrb r0, [r3, 0x2] - lsls r0, 16 - adds r2, r0 - ldrb r0, [r3, 0x3] - lsls r0, 24 - adds r6, r2, r0 - adds r0, r1, 0x5 - str r0, [r4] - ldrb r0, [r1, 0x5] - adds r1, 0x6 - str r1, [r4] - cmp r0, 0 - beq _080740B6 - adds r5, r4, 0 - ldr r4, _080740D8 @ =gBattleAnimArgs - adds r3, r0, 0 -_0807409E: - ldr r2, [r5] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - strh r1, [r4] - adds r2, 0x2 - str r2, [r5] - adds r4, 0x2 - subs r3, 0x1 - cmp r3, 0 - bne _0807409E -_080740B6: - adds r0, r6, 0 - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r6 - ldr r1, _080740DC @ =gUnknown_2037EE3 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080740D4: .4byte gUnknown_2037ED4 -_080740D8: .4byte gBattleAnimArgs -_080740DC: .4byte gUnknown_2037EE3 - thumb_func_end ScriptCmd_createsoundtask - - thumb_func_start ScriptCmd_waitsound -ScriptCmd_waitsound: @ 80740E0 - push {r4,r5,lr} - ldr r0, _08074118 @ =gUnknown_2037EE3 - ldrb r5, [r0] - cmp r5, 0 - bne _08074128 - bl IsSEPlaying - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08074140 - ldr r4, _0807411C @ =gUnknown_2037F12 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x5A - bls _0807412E - ldr r0, _08074120 @ =gMPlayInfo_SE1 - bl m4aMPlayStop - ldr r0, _08074124 @ =gMPlayInfo_SE2 - bl m4aMPlayStop - strh r5, [r4] - b _08074152 - .align 2, 0 -_08074118: .4byte gUnknown_2037EE3 -_0807411C: .4byte gUnknown_2037F12 -_08074120: .4byte gMPlayInfo_SE1 -_08074124: .4byte gMPlayInfo_SE2 -_08074128: - ldr r1, _08074138 @ =gUnknown_2037F12 - movs r0, 0 - strh r0, [r1] -_0807412E: - ldr r1, _0807413C @ =gUnknown_2037EE0 - movs r0, 0x1 - strb r0, [r1] - b _08074152 - .align 2, 0 -_08074138: .4byte gUnknown_2037F12 -_0807413C: .4byte gUnknown_2037EE0 -_08074140: - ldr r0, _08074158 @ =gUnknown_2037F12 - movs r2, 0 - strh r1, [r0] - ldr r1, _0807415C @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - ldr r0, _08074160 @ =gUnknown_2037EE0 - strb r2, [r0] -_08074152: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08074158: .4byte gUnknown_2037F12 -_0807415C: .4byte gUnknown_2037ED4 -_08074160: .4byte gUnknown_2037EE0 - thumb_func_end ScriptCmd_waitsound - - thumb_func_start ScriptCmd_jumpargeq -ScriptCmd_jumpargeq: @ 8074164 - push {r4-r6,lr} - ldr r5, _080741A4 @ =gUnknown_2037ED4 - ldr r4, [r5] - adds r3, r4, 0x1 - str r3, [r5] - ldrb r2, [r4, 0x1] - ldrb r1, [r3, 0x1] - ldrb r0, [r3, 0x2] - lsls r0, 8 - orrs r1, r0 - ldr r0, _080741A8 @ =gBattleAnimArgs - lsls r2, 1 - adds r2, r0 - lsls r1, 16 - asrs r1, 16 - movs r6, 0 - ldrsh r0, [r2, r6] - cmp r1, r0 - bne _080741AC - ldrb r1, [r3, 0x3] - ldrb r0, [r3, 0x4] - lsls r0, 8 - adds r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 16 - adds r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 24 - adds r1, r0 - str r1, [r5] - b _080741B2 - .align 2, 0 -_080741A4: .4byte gUnknown_2037ED4 -_080741A8: .4byte gBattleAnimArgs -_080741AC: - adds r0, r4, 0 - adds r0, 0x8 - str r0, [r5] -_080741B2: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end ScriptCmd_jumpargeq - - thumb_func_start sub_80741B8 -sub_80741B8: @ 80741B8 - ldr r1, _080741C4 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] - bx lr - .align 2, 0 -_080741C4: .4byte gUnknown_2037ED4 - thumb_func_end sub_80741B8 - - thumb_func_start sub_80741C8 -sub_80741C8: @ 80741C8 - push {lr} - ldr r0, _080741DC @ =gUnknown_2037ED4 - ldr r1, [r0] - ldrb r2, [r1, 0x1] - adds r1, 0x2 - str r1, [r0] - cmp r2, 0 - beq _080741E4 - ldr r0, _080741E0 @ =gBattleAnimTarget - b _080741E6 - .align 2, 0 -_080741DC: .4byte gUnknown_2037ED4 -_080741E0: .4byte gBattleAnimTarget -_080741E4: - ldr r0, _08074210 @ =gBattleAnimAttacker -_080741E6: - ldrb r0, [r0] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080741F8 - cmp r0, 0x3 - bne _0807420C -_080741F8: - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute -_0807420C: - pop {r0} - bx r0 - .align 2, 0 -_08074210: .4byte gBattleAnimAttacker - thumb_func_end sub_80741C8 - - thumb_func_start sub_8074214 -sub_8074214: @ 8074214 - push {lr} - ldr r1, _08074238 @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute - pop {r0} - bx r0 - .align 2, 0 -_08074238: .4byte gUnknown_2037ED4 - thumb_func_end sub_8074214 - - thumb_func_start sub_807423C -sub_807423C: @ 807423C - push {r4-r7,lr} - ldr r1, _0807426C @ =gUnknown_2037ED4 - ldr r0, [r1] - ldrb r6, [r0, 0x1] - adds r0, 0x2 - str r0, [r1] - ldr r7, _08074270 @ =gBattleAnimAttacker - ldrb r0, [r7] - bl GetBattlerSide - adds r4, r0, 0 - ldr r5, _08074274 @ =gBattleAnimTarget - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _0807429E - cmp r6, 0 - beq _08074278 - ldrb r0, [r5] - b _0807427A - .align 2, 0 -_0807426C: .4byte gUnknown_2037ED4 -_08074270: .4byte gBattleAnimAttacker -_08074274: .4byte gBattleAnimTarget -_08074278: - ldrb r0, [r7] -_0807427A: - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0807428A - cmp r0, 0x3 - bne _0807429E -_0807428A: - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute -_0807429E: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807423C - - thumb_func_start ScriptCmd_invisible -ScriptCmd_invisible: @ 80742A4 - push {r4,lr} - ldr r4, _080742D8 @ =gUnknown_2037ED4 - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _080742CC - ldr r1, _080742DC @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_080742CC: - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080742D8: .4byte gUnknown_2037ED4 -_080742DC: .4byte gSprites - thumb_func_end ScriptCmd_invisible - - thumb_func_start ScriptCmd_visible -ScriptCmd_visible: @ 80742E0 - push {r4,lr} - ldr r4, _08074318 @ =gUnknown_2037ED4 - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _0807430A - ldr r1, _0807431C @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] -_0807430A: - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08074318: .4byte gUnknown_2037ED4 -_0807431C: .4byte gSprites - thumb_func_end ScriptCmd_visible - - thumb_func_start sub_8074320 -sub_8074320: @ 8074320 - push {r4-r7,lr} - ldr r1, _08074364 @ =gUnknown_2037ED4 - ldr r0, [r1] - ldrb r7, [r0, 0x1] - adds r0, 0x2 - str r0, [r1] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080743C2 - ldr r6, _08074368 @ =gBattleAnimAttacker - ldrb r0, [r6] - bl GetBattlerSide - adds r4, r0, 0 - ldr r5, _0807436C @ =gBattleAnimTarget - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080743C2 - cmp r7, 0 - bne _08074370 - ldrb r0, [r6] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0 - b _0807437C - .align 2, 0 -_08074364: .4byte gUnknown_2037ED4 -_08074368: .4byte gBattleAnimAttacker -_0807436C: .4byte gBattleAnimTarget -_08074370: - ldrb r0, [r5] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x1 -_0807437C: - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _080743C2 - ldr r1, _080743B8 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r2, r0, r1 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - cmp r4, 0x2 - bne _080743AC - ldrb r0, [r2, 0x5] - movs r1, 0xC - orrs r0, r1 - strb r0, [r2, 0x5] -_080743AC: - cmp r4, 0x1 - bne _080743BC - movs r0, 0 - bl sub_8073128 - b _080743C2 - .align 2, 0 -_080743B8: .4byte gSprites -_080743BC: - movs r0, 0x1 - bl sub_8073128 -_080743C2: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8074320 - - thumb_func_start sub_80743C8 -sub_80743C8: @ 80743C8 - push {r4-r7,lr} - ldr r1, _0807440C @ =gUnknown_2037ED4 - ldr r0, [r1] - ldrb r7, [r0, 0x1] - adds r0, 0x2 - str r0, [r1] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0807444C - ldr r6, _08074410 @ =gBattleAnimAttacker - ldrb r0, [r6] - bl GetBattlerSide - adds r4, r0, 0 - ldr r5, _08074414 @ =gBattleAnimTarget - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _0807444C - cmp r7, 0 - bne _08074418 - ldrb r0, [r6] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0 - b _08074424 - .align 2, 0 -_0807440C: .4byte gUnknown_2037ED4 -_08074410: .4byte gBattleAnimAttacker -_08074414: .4byte gBattleAnimTarget -_08074418: - ldrb r0, [r5] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x1 -_08074424: - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _0807444C - cmp r4, 0x2 - bne _0807444C - ldr r1, _08074454 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - movs r2, 0x8 - orrs r1, r2 - strb r1, [r0, 0x5] -_0807444C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08074454: .4byte gSprites - thumb_func_end sub_80743C8 - - thumb_func_start sub_8074458 -sub_8074458: @ 8074458 - push {lr} - ldr r0, _08074474 @ =gMPlayInfo_SE1 - bl m4aMPlayStop - ldr r0, _08074478 @ =gMPlayInfo_SE2 - bl m4aMPlayStop - ldr r1, _0807447C @ =gUnknown_2037ED4 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08074474: .4byte gMPlayInfo_SE1 -_08074478: .4byte gMPlayInfo_SE2 -_0807447C: .4byte gUnknown_2037ED4 - thumb_func_end sub_8074458 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle_anim.h b/include/battle_anim.h index ad1a0fed8..dc2db9cbf 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -91,7 +91,7 @@ extern const struct OamData gOamData_83ACB88; extern const struct OamData gOamData_83ACBC0; extern const struct OamData gOamData_83ACBE8; -// battle_anim.s +// battle_anim.c void MoveBattlerSpriteToBG(u8 battlerId, u8); void sub_8073128(u8); void ClearBattleAnimationVars(void); diff --git a/ld_script.txt b/ld_script.txt index 4fd74f9c5..8ecfe8794 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -421,6 +421,7 @@ SECTIONS { src/tileset_anims.o(.rodata); src/palette.o(.rodata); src/sound.o(.rodata); + src/battle_anim.o(.rodata); data/battle_anim.o(.rodata); src/battle_anim_mons.o(.rodata); data/map_events.o(.rodata); diff --git a/src/battle_anim.c b/src/battle_anim.c index 64f01beb1..a92cf98de 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -3,6 +3,20 @@ #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" +#include "bg.h" +#include "contest.h" +#include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "main.h" +#include "m4a.h" +#include "palette.h" +#include "pokemon.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "constants/battle_anim.h" // Defines #define ANIM_SPRITE_INDEX_COUNT 8 @@ -32,11 +46,114 @@ EWRAM_DATA u8 gBattleAnimTarget = 0; EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gUnknown_2037F24 = 0; -// Data - // Function Declarations +static void AddSpriteIndex(u16 index); +static void ClearSpriteIndex(u16 index); +static void WaitAnimFrameCount(void); +static void RunAnimScriptCommand(void); +static void ScriptCmd_loadspritegfx(void); +static void ScriptCmd_unloadspritegfx(void); +static void ScriptCmd_createsprite(void); +static void ScriptCmd_createvisualtask(void); +static void ScriptCmd_delay(void); +static void ScriptCmd_waitforvisualfinish(void); +static void ScriptCmd_hang1(void); +static void ScriptCmd_hang2(void); +static void ScriptCmd_end(void); +static void ScriptCmd_playse(void); +static void ScriptCmd_monbg(void); +static void ScriptCmd_clearmonbg(void); +static void ScriptCmd_setalpha(void); +static void ScriptCmd_blendoff(void); +static void ScriptCmd_call(void); +static void ScriptCmd_return(void); +static void ScriptCmd_setarg(void); +static void ScriptCmd_choosetwoturnanim(void); +static void ScriptCmd_jumpifmoveturn(void); +static void ScriptCmd_goto(void); +static void ScriptCmd_fadetobg(void); +static void ScriptCmd_restorebg(void); +static void ScriptCmd_waitbgfadeout(void); +static void ScriptCmd_waitbgfadein(void); +static void ScriptCmd_changebg(void); +static void ScriptCmd_playsewithpan(void); +static void ScriptCmd_setpan(void); +static void ScriptCmd_panse_1B(void); +static void ScriptCmd_loopsewithpan(void); +static void ScriptCmd_waitplaysewithpan(void); +static void ScriptCmd_setbldcnt(void); +static void ScriptCmd_createsoundtask(void); +static void ScriptCmd_waitsound(void); +static void ScriptCmd_jumpargeq(void); +static void ScriptCmd_monbg_22(void); +static void ScriptCmd_clearmonbg_23(void); +static void ScriptCmd_jumpifcontest(void); +static void ScriptCmd_fadetobgfromset(void); +static void ScriptCmd_panse_26(void); +static void ScriptCmd_panse_27(void); +static void ScriptCmd_monbgprio_28(void); +static void ScriptCmd_monbgprio_29(void); +static void ScriptCmd_monbgprio_2A(void); +static void ScriptCmd_invisible(void); +static void ScriptCmd_visible(void); +static void ScriptCmd_doublebattle_2D(void); +static void ScriptCmd_doublebattle_2E(void); +static void ScriptCmd_stopsound(void); +// Data +static void (* const sScriptCmdTable[])(void) = //83ADF5C +{ + ScriptCmd_loadspritegfx, + ScriptCmd_unloadspritegfx, + ScriptCmd_createsprite, + ScriptCmd_createvisualtask, + ScriptCmd_delay, + ScriptCmd_waitforvisualfinish, + ScriptCmd_hang1, + ScriptCmd_hang2, + ScriptCmd_end, + ScriptCmd_playse, + ScriptCmd_monbg, + ScriptCmd_clearmonbg, + ScriptCmd_setalpha, + ScriptCmd_blendoff, + ScriptCmd_call, + ScriptCmd_return, + ScriptCmd_setarg, + ScriptCmd_choosetwoturnanim, + ScriptCmd_jumpifmoveturn, + ScriptCmd_goto, + ScriptCmd_fadetobg, + ScriptCmd_restorebg, + ScriptCmd_waitbgfadeout, + ScriptCmd_waitbgfadein, + ScriptCmd_changebg, + ScriptCmd_playsewithpan, + ScriptCmd_setpan, + ScriptCmd_panse_1B, + ScriptCmd_loopsewithpan, + ScriptCmd_waitplaysewithpan, + ScriptCmd_setbldcnt, + ScriptCmd_createsoundtask, + ScriptCmd_waitsound, + ScriptCmd_jumpargeq, + ScriptCmd_monbg_22, + ScriptCmd_clearmonbg_23, + ScriptCmd_jumpifcontest, + ScriptCmd_fadetobgfromset, + ScriptCmd_panse_26, + ScriptCmd_panse_27, + ScriptCmd_monbgprio_28, + ScriptCmd_monbgprio_29, + ScriptCmd_monbgprio_2A, + ScriptCmd_invisible, + ScriptCmd_visible, + ScriptCmd_doublebattle_2D, + ScriptCmd_doublebattle_2E, + ScriptCmd_stopsound +}; +// Functions void ClearBattleAnimationVars(void) { s32 i; @@ -79,23 +196,15 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo { s32 i; - if (!IsContest()) - { - sub_80A8278(); - UpdateOamPriorityInAllHealthboxes(0); - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (GetBattlerSide(i) != B_SIDE_PLAYER) - gAnimBattlerSpecies[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - else - gAnimBattlerSpecies[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - } - } - else - { - for (i = 0; i < 4; i++) - gAnimBattlerSpecies[i] = gContestResources->field_18->species; - } + sub_80767F0(); + UpdateOamPriorityInAllHealthboxes(0); + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (GetBattlerSide(i) != B_SIDE_PLAYER) + gAnimBattlerSpecies[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + else + gAnimBattlerSpecies[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + } if (!isMoveAnim) sAnimMoveIndex = 0; @@ -106,7 +215,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo gBattleAnimArgs[i] = 0; sMonAnimTaskIdArray[0] = 0xFF; - sMonAnimTaskIdArray[1] = 0xFF; + sMonAnimTaskIdArray[1] = (s8)-1; sBattleAnimScriptPtr = animsTable[tableId]; gAnimScriptActive = TRUE; gAnimFramesToWait = 0; @@ -133,4 +242,1454 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo gBattle_WIN1V = 0; } +void DestroyAnimSprite(struct Sprite *sprite) +{ + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + gAnimVisualTaskCount--; +} + +void DestroyAnimVisualTask(u8 taskId) +{ + DestroyTask(taskId); + gAnimVisualTaskCount--; +} + +void DestroyAnimSoundTask(u8 taskId) +{ + DestroyTask(taskId); + gAnimSoundTaskCount--; +} + +static void AddSpriteIndex(u16 index) +{ + s32 i; + + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) + { + if (sAnimSpriteIndexArray[i] == 0xFFFF) + { + sAnimSpriteIndexArray[i] = index; + return; + } + } +} + +static void ClearSpriteIndex(u16 index) +{ + s32 i; + + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) + { + if (sAnimSpriteIndexArray[i] == index) + { + sAnimSpriteIndexArray[i] = 0xFFFF; + return; + } + } +} + +static void WaitAnimFrameCount(void) +{ + if (gAnimFramesToWait <= 0) + { + gAnimScriptCallback = RunAnimScriptCommand; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait--; + } +} + +static void RunAnimScriptCommand(void) +{ + do + { + sScriptCmdTable[sBattleAnimScriptPtr[0]](); + } while (gAnimFramesToWait == 0 && gAnimScriptActive); +} + +static void ScriptCmd_loadspritegfx(void) +{ + u16 index; + + sBattleAnimScriptPtr++; + index = T1_READ_16(sBattleAnimScriptPtr); + LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); + LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); + sBattleAnimScriptPtr += 2; + AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); + gAnimFramesToWait = 1; + gAnimScriptCallback = WaitAnimFrameCount; +} + +static void ScriptCmd_unloadspritegfx(void) +{ + u16 index; + + sBattleAnimScriptPtr++; + index = T1_READ_16(sBattleAnimScriptPtr); + FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); + FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); + sBattleAnimScriptPtr += 2; + ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); +} + +static void ScriptCmd_createsprite(void) +{ + s32 i; + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + s16 subpriority; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + argsCount = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + for (i = 0; i < argsCount; i++) + { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + if (argVar & 0x80) + { + argVar ^= 0x80; + if (argVar >= 0x40) + argVar -= 0x40; + else + argVar *= -1; + + subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (s8)(argVar); + } + else + { + if (argVar >= 0x40) + argVar -= 0x40; + else + argVar *= -1; + + subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + (s8)(argVar); + } + + if (subpriority < 3) + subpriority = 3; + + CreateSpriteAndAnimate( + template, + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2), + GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET), + subpriority); + gAnimVisualTaskCount++; +} + +static void ScriptCmd_createvisualtask(void) +{ + TaskFunc taskFunc; + u8 taskPriority; + u8 taskId; + u8 numArgs; + s32 i; + + sBattleAnimScriptPtr++; + + taskFunc = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 4; + + taskPriority = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + numArgs = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + for (i = 0; i < numArgs; i++) + { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + taskId = CreateTask(taskFunc, taskPriority); + taskFunc(taskId); + gAnimVisualTaskCount++; +} + +static void ScriptCmd_delay(void) +{ + sBattleAnimScriptPtr++; + gAnimFramesToWait = sBattleAnimScriptPtr[0]; + if (gAnimFramesToWait == 0) + gAnimFramesToWait = -1; + sBattleAnimScriptPtr++; + gAnimScriptCallback = WaitAnimFrameCount; +} + +// Wait for visual tasks to finish. +static void ScriptCmd_waitforvisualfinish(void) +{ + if (gAnimVisualTaskCount == 0) + { + sBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } +} + +static void ScriptCmd_end(void) +{ + s32 i; + bool32 continuousAnim = FALSE; + + // Keep waiting as long as there are animations to be done. + if (gAnimVisualTaskCount != 0 || gAnimSoundTaskCount != 0 + || sMonAnimTaskIdArray[0] != 0xFF || sMonAnimTaskIdArray[1] != 0xFF) + { + sSoundAnimFramesToWait = 0; + gAnimFramesToWait = 1; + return; + } + + // Finish the sound effects. + if (IsSEPlaying()) + { + if (++sSoundAnimFramesToWait <= 90) // Wait 90 frames, then halt the sound effect. + { + gAnimFramesToWait = 1; + return; + } + else + { + m4aMPlayStop(&gMPlayInfo_SE1); + m4aMPlayStop(&gMPlayInfo_SE2); + } + } + + // The SE has halted, so set the SE Frame Counter to 0 and continue. + sSoundAnimFramesToWait = 0; + + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) + { + if (sAnimSpriteIndexArray[i] != 0xFFFF) + { + FreeSpriteTilesByTag(gBattleAnimPicTable[sAnimSpriteIndexArray[i]].tag); + FreeSpritePaletteByTag(gBattleAnimPicTable[sAnimSpriteIndexArray[i]].tag); + sAnimSpriteIndexArray[i] = 0xFFFF; // set terminator. + } + } + + if (!continuousAnim) // May have been used for debug? + { + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + if (!IsContest()) + { + sub_80A8278(); + UpdateOamPriorityInAllHealthboxes(1); + } + gAnimScriptActive = FALSE; + } +} + +static void ScriptCmd_playse(void) +{ + sBattleAnimScriptPtr++; + PlaySE(T1_READ_16(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 2; +} + +#define t1_MONBG_BATTLER 0 +#define t1_MON_IN_BG2 1 +#define t1_CREATE_ANOTHER_TASK 2 +#define t1_IS_SECONDMON_BG 3 + +#define t2_BATTLER_SPRITE_ID 0 +#define t2_MON_IN_BG2 5 +#define t2_MONBG_BATTLER 6 + +static void ScriptCmd_monbg(void) +{ + bool8 toBG_2; + u8 taskId; + u8 battlerId; + u8 animBattler; + + sBattleAnimScriptPtr++; + + animBattler = sBattleAnimScriptPtr[0]; + if (animBattler & ANIM_TARGET) + battlerId = gBattleAnimTarget; + else + battlerId = gBattleAnimAttacker; + + if (IsBattlerSpriteVisible(battlerId)) + { + u8 position = GetBattlerPosition(battlerId); + if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = FALSE; + else + toBG_2 = TRUE; + + MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); + gAnimVisualTaskCount++; + gTasks[taskId].data[t1_MONBG_BATTLER] = battlerId; + gTasks[taskId].data[t1_MON_IN_BG2] = toBG_2; + gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE; + gTasks[taskId].data[t1_IS_SECONDMON_BG] = 0; + + } + + battlerId ^= BIT_FLANK; + if (IsBattlerSpriteVisible(battlerId)) + { + u8 position = GetBattlerPosition(battlerId); + if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = FALSE; + else + toBG_2 = TRUE; + + MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); + gAnimVisualTaskCount++; + gTasks[taskId].data[0] = battlerId; + gTasks[taskId].data[1] = toBG_2; + gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE; + gTasks[taskId].data[t1_IS_SECONDMON_BG] = 1; + } + + sBattleAnimScriptPtr++; + gAnimFramesToWait = 1; + gAnimScriptCallback = WaitAnimFrameCount; +} + +bool8 IsBattlerSpriteVisible(u8 battlerId) +{ + if (!IsBattlerSpritePresent(battlerId)) + return FALSE; + + if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible) + return TRUE; + + return FALSE; +} + +void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) +{ + struct BattleAnimBgData animBg; + u8 battlerSpriteId; + + if (!toBG_2) + { + u8 battlerPosition; + + RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(16)), 0x2000, 1); + RequestDma3Fill(0xFF, (void*)(BG_SCREEN_ADDR(30)), 0x1000, 0); + sub_80752A0(&animBg); + CpuFill16(0, animBg.bgTiles, 0x1000); + CpuFill16(0xFF, animBg.bgTilemap, 0x800); + + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 2); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); + SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0); + + battlerSpriteId = gBattlerSpriteIds[battlerId]; + + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + + LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], animBg.paletteId * 16, 0x20); + CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + animBg.paletteId * 32), 0x20); + + battlerPosition = GetBattlerPosition(battlerId); + + sub_80BCEF4(1, 0, 0, battlerPosition, animBg.paletteId, animBg.bgTiles, animBg.bgTilemap, animBg.tilesOffset); + } + else + { + RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(12)), 0x2000, 1); + RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(30)), 0x1000, 1); + sub_80752C8(&animBg, 2); + CpuFill16(0, animBg.bgTiles + 0x1000, 0x1000); + CpuFill16(0, animBg.bgTilemap + 0x400, 0x800); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); + SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 1); + SetAnimBgAttribute(2, BG_ANIM_AREA_OVERFLOW_MODE, 0); + + battlerSpriteId = gBattlerSpriteIds[battlerId]; + + gBattle_BG2_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20; + gBattle_BG2_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20; + + SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); + SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); + + LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20); + CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20); + + sub_80BCEF4(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset); + } +} + +void sub_80730C0(u16 a, u16 *b, u32 c, u8 d) +{ + s32 i, j; + s32 var; + + if (d == 0) + var = 32; + else + var = 64; + a <<= 12; + for (i = 0; i < var; i++) + { + for (j = 0; j < 32; j++) + b[j + i * 32] = ((b[j + i * 32] & 0xFFF) | a) + c; + } +} + +void sub_8073128(bool8 to_BG2) +{ + struct BattleAnimBgData animBg; + sub_80752A0(&animBg); + + if (!to_BG2)) + { + sub_8075358(1); + gBattle_BG1_X = NULL; + gBattle_BG1_Y = NULL; + } + else + { + sub_8075358(2); + gBattle_BG2_X = NULL; + gBattle_BG2_Y = NULL; + } +} + +static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) +{ + u8 spriteId, palIndex; + s16 x, y; + struct BattleAnimBgData animBg; + + spriteId = gTasks[taskId].data[0]; + palIndex = gTasks[taskId].data[6]; + sub_80752A0(&animBg); + x = gTasks[taskId].data[1] - (gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x); + y = gTasks[taskId].data[2] - (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y); + + if (gTasks[taskId].data[5] == 0) + { + u16 *src; + u16 *dst; + + gBattle_BG1_X = x + gTasks[taskId].data[3]; + gBattle_BG1_Y = y + gTasks[taskId].data[4]; + src = gPlttBufferFaded + 0x100 + palIndex * 16; + dst = gPlttBufferFaded + 0x100 + animBg.paletteId * 16 - 256; + CpuCopy32(src, dst, 0x20); + } + else + { + u16 *src; + u16 *dst; + + gBattle_BG2_X = x + gTasks[taskId].data[3]; + gBattle_BG2_Y = y + gTasks[taskId].data[4]; + src = gPlttBufferFaded + 0x100 + palIndex * 16; + dst = gPlttBufferFaded + 0x100 - 112; + CpuCopy32(src, dst, 0x20); + } +} + +static void ScriptCmd_clearmonbg(void) +{ + u8 animBattlerId; + u8 battlerId; + u8 taskId; + + sBattleAnimScriptPtr++; + animBattlerId = sBattleAnimScriptPtr[0]; + + if (animBattlerId == ANIM_ATTACKER) + animBattlerId = ANIM_ATK_PARTNER; + else if (animBattlerId == ANIM_TARGET) + animBattlerId = ANIM_DEF_PARTNER; + + if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER) + battlerId = gBattleAnimAttacker; + else + battlerId = gBattleAnimTarget; + + if (sMonAnimTaskIdArray[0] != 0xFF) + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; + if (animBattlerId > 1 && sMonAnimTaskIdArray[1] != 0xFF) + gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = FALSE; + else + animBattlerId = 0; + + taskId = CreateTask(sub_807331C, 5); + gTasks[taskId].data[0] = animBattlerId; + gTasks[taskId].data[2] = battlerId; + + sBattleAnimScriptPtr++; +} + +static void sub_807331C(u8 taskId) +{ + gTasks[taskId].data[1]++; + if (gTasks[taskId].data[1] != 1) + { + u8 to_BG2; + u8 position = GetBattlerPosition(gTasks[taskId].data[2]); + if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + to_BG2 = FALSE; + else + to_BG2 = TRUE; + + if (sMonAnimTaskIdArray[0] != 0xFF) + { + sub_8073128(to_BG2); + DestroyTask(sMonAnimTaskIdArray[0]); + sMonAnimTaskIdArray[0] = 0xFF; + } + if (gTasks[taskId].data[0] > 1) + { + sub_8073128(to_BG2 ^ 1); + DestroyTask(sMonAnimTaskIdArray[1]); + sMonAnimTaskIdArray[1] = 0xFF; + } + DestroyTask(taskId); + } +} + +static void ScriptCmd_monbg_22(void) +{ + bool8 toBG_2; + u8 battlerId; + u8 animBattlerId; + + sBattleAnimScriptPtr++; + + animBattlerId = sBattleAnimScriptPtr[0]; + + if (animBattlerId == ANIM_ATTACKER) + animBattlerId = ANIM_ATK_PARTNER; + else if (animBattlerId == ANIM_TARGET) + animBattlerId = ANIM_DEF_PARTNER; + + if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER) + battlerId = gBattleAnimAttacker; + else + battlerId = gBattleAnimTarget; + + if (IsBattlerSpriteVisible(battlerId)) + { + u8 position = GetBattlerPosition(battlerId); + if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = FALSE; + else + toBG_2 = TRUE; + + MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + } + + battlerId ^= BIT_FLANK; + if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId)) + { + u8 position = GetBattlerPosition(battlerId); + if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = FALSE; + else + toBG_2 = TRUE; + + MoveBattlerSpriteToBG(battlerId, toBG_2, FALSE); + } + + sBattleAnimScriptPtr++; +} + +static void ScriptCmd_clearmonbg_23(void) +{ + u8 animBattlerId; + u8 battlerId; + u8 taskId; + + sBattleAnimScriptPtr++; + animBattlerId = sBattleAnimScriptPtr[0]; + if (animBattlerId == ANIM_ATTACKER) + animBattlerId = ANIM_ATK_PARTNER; + else if (animBattlerId == ANIM_TARGET) + animBattlerId = ANIM_DEF_PARTNER; + + if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER) + battlerId = gBattleAnimAttacker; + else + battlerId = gBattleAnimTarget; + + if (IsBattlerSpriteVisible(battlerId)) + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; + if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK)) + gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = FALSE; + else + animBattlerId = 0; + + taskId = CreateTask(sub_8073558, 5); + gTasks[taskId].data[0] = animBattlerId; + gTasks[taskId].data[2] = battlerId; + + sBattleAnimScriptPtr++; +} + +static void sub_8073558(u8 taskId) +{ + gTasks[taskId].data[1]++; + if (gTasks[taskId].data[1] != 1) + { + bool8 toBG_2; + u8 battlerId = gTasks[taskId].data[2]; + u8 position = GetBattlerPosition(battlerId); + if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) + toBG_2 = FALSE; + else + toBG_2 = TRUE; + + if (IsBattlerSpriteVisible(battlerId)) + sub_8073128(toBG_2); + if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK)) + sub_8073128(toBG_2 ^ 1); + + DestroyTask(taskId); + } +} + +#undef t1_MONBG_BATTLER +#undef t1_MON_IN_BG2 +#undef t1_CREATE_ANOTHER_TASK +#undef t1_IS_SECONDMON_BG + +#undef t2_BATTLER_SPRITE_ID +#undef t2_MON_IN_BG2 +#undef t2_MONBG_BATTLER + +static void ScriptCmd_setalpha(void) +{ + u16 half1, half2; + + sBattleAnimScriptPtr++; + half1 = *(sBattleAnimScriptPtr++); + half2 = *(sBattleAnimScriptPtr++) << 8; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, half1 | half2); +} + +static void ScriptCmd_setbldcnt(void) +{ + u16 half1, half2; + + sBattleAnimScriptPtr++; + half1 = *(sBattleAnimScriptPtr++); + half2 = *(sBattleAnimScriptPtr++) << 8; + SetGpuReg(REG_OFFSET_BLDCNT, half1 | half2); +} + +static void ScriptCmd_blendoff(void) +{ + sBattleAnimScriptPtr++; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); +} + +static void ScriptCmd_call(void) +{ + sBattleAnimScriptPtr++; + sBattleAnimScriptRetAddr = sBattleAnimScriptPtr + 4; + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); +} + +static void ScriptCmd_return(void) +{ + sBattleAnimScriptPtr = sBattleAnimScriptRetAddr; +} + +static void ScriptCmd_setarg(void) +{ + const u8 *addr = sBattleAnimScriptPtr; + u16 value; + u8 argId; + + sBattleAnimScriptPtr++; + argId = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + value = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr = addr + 4; + gBattleAnimArgs[argId] = value; +} + +static void ScriptCmd_choosetwoturnanim(void) +{ + sBattleAnimScriptPtr++; + if (gAnimMoveTurn & 1) + sBattleAnimScriptPtr += 4; + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); +} + +static void ScriptCmd_jumpifmoveturn(void) +{ + u8 toCheck; + sBattleAnimScriptPtr++; + toCheck = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + if (toCheck == gAnimMoveTurn) + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); + else + sBattleAnimScriptPtr += 4; +} + +static void ScriptCmd_goto(void) +{ + sBattleAnimScriptPtr++; + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); +} + +//unused +bool8 IsContest(void) +{ + if (!gMain.inBattle) + return TRUE; + else + return FALSE; +} + +#define tBackgroundId data[0] +#define tState data[10] + +static void ScriptCmd_fadetobg(void) +{ + u8 backgroundId; + u8 taskId; + + sBattleAnimScriptPtr++; + backgroundId = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + taskId = CreateTask(Task_FadeToBg, 5); + gTasks[taskId].tBackgroundId = backgroundId; + sAnimBackgroundFadeState = 1; +} + +static void ScriptCmd_fadetobgfromset(void) +{ + u8 bg1, bg2, bg3; + u8 taskId; + + sBattleAnimScriptPtr++; + bg1 = sBattleAnimScriptPtr[0]; + bg2 = sBattleAnimScriptPtr[1]; + bg3 = sBattleAnimScriptPtr[2]; + sBattleAnimScriptPtr += 3; + taskId = CreateTask(Task_FadeToBg, 5); + + if (IsContest()) + gTasks[taskId].tBackgroundId = bg3; + else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + gTasks[taskId].tBackgroundId = bg2; + else + gTasks[taskId].tBackgroundId = bg1; + + sAnimBackgroundFadeState = 1; +} + +static void Task_FadeToBg(u8 taskId) +{ + if (gTasks[taskId].tState == 0) + { + BeginHardwarePaletteFade(0xE8, 0, 0, 16, 0); + gTasks[taskId].tState++; + return; + } + if (gPaletteFade.active) + return; + if (gTasks[taskId].tState == 1) + { + gTasks[taskId].tState++; + sAnimBackgroundFadeState = 2; + } + else if (gTasks[taskId].tState == 2) + { + s16 bgId = gTasks[taskId].tBackgroundId; + + if (bgId == -1) + LoadDefaultBg(); + else + LoadMoveBg(bgId); + + BeginHardwarePaletteFade(0xE8, 0, 16, 0, 1); + gTasks[taskId].tState++; + return; + } + if (gPaletteFade.active) + return; + if (gTasks[taskId].tState == 3) + { + DestroyTask(taskId); + sAnimBackgroundFadeState = 0; + } +} + +static void LoadMoveBg(u16 bgId) +{ + if (IsContest()) + { + const u32 *tilemap = gBattleAnimBackgroundTable[bgId].tilemap; + void *dmaSrc; + void *dmaDest; + + LZDecompressWram(tilemap, gDecompressionBuffer); + sub_80730C0(sub_80A6D94(), (void*)(gDecompressionBuffer), 0x100, 0); + dmaSrc = gDecompressionBuffer; + dmaDest = (void *)(BG_SCREEN_ADDR(26)); + DmaCopy32(3, dmaSrc, dmaDest, 0x800); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_SCREEN_ADDR(4))); + LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80A6D94() * 16, 32); + } + else + { + LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)(BG_SCREEN_ADDR(26))); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_CHAR_ADDR(2))); + LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, 32, 32); + } +} + +static void LoadDefaultBg(void) +{ + if (IsContest()) + LoadContestBgAfterMoveAnim(); + else + DrawMainBattleBackground(); +} + +static void ScriptCmd_restorebg(void) +{ + u8 taskId; + + sBattleAnimScriptPtr++; + taskId = CreateTask(Task_FadeToBg, 5); + gTasks[taskId].tBackgroundId = -1; + sAnimBackgroundFadeState = 1; +} + +#undef tBackgroundId +#undef tState + +static void ScriptCmd_waitbgfadeout(void) +{ + if (sAnimBackgroundFadeState == 2) + { + sBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } +} + +static void ScriptCmd_waitbgfadein(void) +{ + if (sAnimBackgroundFadeState == 0) + { + sBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } +} + +static void ScriptCmd_changebg(void) +{ + sBattleAnimScriptPtr++; + LoadMoveBg(sBattleAnimScriptPtr[0]); + sBattleAnimScriptPtr++; +} + +s8 BattleAnimAdjustPanning(s8 pan) +{ + if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gBattleAnimAttacker].statusAnimActive) + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + pan = SOUND_PAN_TARGET; + else + pan = SOUND_PAN_ATTACKER; + } + else if (IsContest()) + { + if (gBattleAnimAttacker != gBattleAnimTarget || gBattleAnimAttacker != 2 || pan != SOUND_PAN_TARGET) + pan *= -1; + } + else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + if (pan == SOUND_PAN_TARGET) + pan = SOUND_PAN_ATTACKER; + else if (pan != SOUND_PAN_ATTACKER) + pan *= -1; + } + } + else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + { + if (pan == SOUND_PAN_ATTACKER) + pan = SOUND_PAN_TARGET; + } + else + { + pan *= -1; + } + + if (pan > SOUND_PAN_TARGET) + pan = SOUND_PAN_TARGET; + else if (pan < SOUND_PAN_ATTACKER) + pan = SOUND_PAN_ATTACKER; + + return pan; +} + +s8 BattleAnimAdjustPanning2(s8 pan) +{ + if (!IsContest() && gBattleSpritesDataPtr->healthBoxesData[gBattleAnimAttacker].statusAnimActive) + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + pan = SOUND_PAN_TARGET; + else + pan = SOUND_PAN_ATTACKER; + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest()) + pan = -pan; + } + return pan; +} + +s16 KeepPanInRange(s16 panArg, int oldPan) +{ + s16 pan = panArg; + + if (pan > SOUND_PAN_TARGET) + pan = SOUND_PAN_TARGET; + else if (pan < SOUND_PAN_ATTACKER) + pan = SOUND_PAN_ATTACKER; + + return pan; +} + +s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan) +{ + s16 ret; + + if (sourcePan < targetPan) + ret = ((incrementPan < 0) ? -incrementPan : incrementPan); + else if (sourcePan > targetPan) + ret = -((incrementPan < 0) ? -incrementPan : incrementPan); + else + ret = 0; + + return ret; +} + +static void ScriptCmd_playsewithpan(void) +{ + u16 songId; + s8 pan; + + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + pan = sBattleAnimScriptPtr[2]; + PlaySE12WithPanning(songId, BattleAnimAdjustPanning(pan)); + sBattleAnimScriptPtr += 3; +} + +static void ScriptCmd_setpan(void) +{ + s8 pan; + + sBattleAnimScriptPtr++; + pan = sBattleAnimScriptPtr[0]; + SE12PanpotControl(BattleAnimAdjustPanning(pan)); + sBattleAnimScriptPtr++; +} + +#define tInitialPan data[0] +#define tTargetPan data[1] +#define tIncrementPan data[2] +#define tFramesToWait data[3] +#define tCurrentPan data[4] +#define tFrameCounter data[8] + +static void ScriptCmd_panse_1B(void) +{ + u16 songNum; + s8 currentPanArg, incrementPan, incrementPanArg, currentPan, targetPan; + u8 framesToWait; + u8 taskId; + + sBattleAnimScriptPtr++; + songNum = T1_READ_16(sBattleAnimScriptPtr); + currentPanArg = sBattleAnimScriptPtr[2]; + incrementPan = sBattleAnimScriptPtr[3]; + incrementPanArg = sBattleAnimScriptPtr[4]; + framesToWait = sBattleAnimScriptPtr[5]; + + currentPan = BattleAnimAdjustPanning(currentPanArg); + targetPan = BattleAnimAdjustPanning(incrementPan); + incrementPan = CalculatePanIncrement(currentPan, targetPan, incrementPanArg); + taskId = CreateTask(Task_PanFromInitialToTarget, 1); + gTasks[taskId].tInitialPan = currentPan; + gTasks[taskId].tTargetPan = targetPan; + gTasks[taskId].tIncrementPan = incrementPan; + gTasks[taskId].tFramesToWait = framesToWait; + gTasks[taskId].tCurrentPan = currentPan; + + PlaySE12WithPanning(songNum, currentPan); + + gAnimSoundTaskCount++; + sBattleAnimScriptPtr += 6; +} + +void Task_PanFromInitialToTarget(u8 taskId) +{ + bool32 destroyTask = FALSE; + if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tFramesToWait) + { + s16 pan; + s16 initialPanning, targetPanning, currentPan, incrementPan; + + gTasks[taskId].tFrameCounter = 0; + initialPanning = gTasks[taskId].tInitialPan; + targetPanning = gTasks[taskId].tTargetPan; + currentPan = gTasks[taskId].tCurrentPan; + incrementPan = gTasks[taskId].tIncrementPan; + pan = currentPan + incrementPan; + gTasks[taskId].tCurrentPan = pan; + + if (incrementPan == 0) // If we're not incrementing, just cancel the task immediately. + { + destroyTask = TRUE; + } + else if (initialPanning < targetPanning) // Panning increasing. + { + if (pan >= targetPanning) // Target reached. + destroyTask = TRUE; + } + else // Panning decreasing. + { + if (pan <= targetPanning) // Target reached. + destroyTask = TRUE; + } + + if (destroyTask) + { + pan = targetPanning; + DestroyTask(taskId); + gAnimSoundTaskCount--; + } + + SE12PanpotControl(pan); + } +} + +static void ScriptCmd_panse_26(void) +{ + u16 songId; + s8 currentPan, targetPan, incrementPan; + u8 framesToWait; + u8 taskId; + + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + currentPan = sBattleAnimScriptPtr[2]; + targetPan = sBattleAnimScriptPtr[3]; + incrementPan = sBattleAnimScriptPtr[4]; + framesToWait = sBattleAnimScriptPtr[5]; + + taskId = CreateTask(Task_PanFromInitialToTarget, 1); + gTasks[taskId].tInitialPan = currentPan; + gTasks[taskId].tTargetPan = targetPan; + gTasks[taskId].tIncrementPan = incrementPan; + gTasks[taskId].tFramesToWait = framesToWait; + gTasks[taskId].tCurrentPan = currentPan; + + PlaySE12WithPanning(songId, currentPan); + + gAnimSoundTaskCount++; + sBattleAnimScriptPtr += 6; +} + +static void ScriptCmd_panse_27(void) +{ + u16 songId; + s8 targetPanArg, incrementPanArg, currentPanArg, currentPan, targetPan, incrementPan; + u8 framesToWait; + u8 taskId; + + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + currentPanArg = sBattleAnimScriptPtr[2]; + targetPanArg = sBattleAnimScriptPtr[3]; + incrementPanArg = sBattleAnimScriptPtr[4]; + framesToWait = sBattleAnimScriptPtr[5]; + + currentPan = BattleAnimAdjustPanning2(currentPanArg); + targetPan = BattleAnimAdjustPanning2(targetPanArg); + incrementPan = BattleAnimAdjustPanning2(incrementPanArg); + + taskId = CreateTask(Task_PanFromInitialToTarget, 1); + gTasks[taskId].tInitialPan = currentPan; + gTasks[taskId].tTargetPan = targetPan; + gTasks[taskId].tIncrementPan = incrementPan; + gTasks[taskId].tFramesToWait = framesToWait; + gTasks[taskId].tCurrentPan = currentPan; + + PlaySE12WithPanning(songId, currentPan); + + gAnimSoundTaskCount++; + sBattleAnimScriptPtr += 6; +} + +#undef tInitialPan +#undef tTargetPan +#undef tIncrementPan +#undef tFramesToWait +#undef tCurrentPan +#undef tFrameCounter + +#define tSongId data[0] +#define tPanning data[1] +#define tFramesToWait data[2] +#define tNumberOfPlays data[3] +#define tFrameCounter data[8] + +static void ScriptCmd_loopsewithpan(void) +{ + u16 songId; + s8 panningArg, panning; + u8 framesToWait, numberOfPlays; + u8 taskId; + + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + panningArg = sBattleAnimScriptPtr[2]; + framesToWait = sBattleAnimScriptPtr[3]; + numberOfPlays = sBattleAnimScriptPtr[4]; + panning = BattleAnimAdjustPanning(panningArg); + + taskId = CreateTask(Task_LoopAndPlaySE, 1); + gTasks[taskId].tSongId = songId; + gTasks[taskId].tPanning = panning; + gTasks[taskId].tFramesToWait = framesToWait; + gTasks[taskId].tNumberOfPlays = numberOfPlays; + gTasks[taskId].tFrameCounter = framesToWait; + gTasks[taskId].func(taskId); + + gAnimSoundTaskCount++; + sBattleAnimScriptPtr += 5; +} + +static void Task_LoopAndPlaySE(u8 taskId) +{ + if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tFramesToWait) + { + u16 songId; + s8 panning; + u8 numberOfPlays; + + gTasks[taskId].tFrameCounter = 0; + songId = gTasks[taskId].tSongId; + panning = gTasks[taskId].tPanning; + numberOfPlays = --gTasks[taskId].tNumberOfPlays; + PlaySE12WithPanning(songId, panning); + if (numberOfPlays == 0) + { + DestroyTask(taskId); + gAnimSoundTaskCount--; + } + } +} + +#undef tSongId +#undef tPanning +#undef tFramesToWait +#undef tNumberOfPlays +#undef tFrameCounter + +#define tSongId data[0] +#define tPanning data[1] +#define tFramesToWait data[2] + +static void ScriptCmd_waitplaysewithpan(void) +{ + u16 songId; + s8 panningArg, panning; + u8 framesToWait; + u8 taskId; + + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + panningArg = sBattleAnimScriptPtr[2]; + framesToWait = sBattleAnimScriptPtr[3]; + panning = BattleAnimAdjustPanning(panningArg); + + taskId = CreateTask(Task_WaitAndPlaySE, 1); + gTasks[taskId].tSongId = songId; + gTasks[taskId].tPanning = panning; + gTasks[taskId].tFramesToWait = framesToWait; + + gAnimSoundTaskCount++; + sBattleAnimScriptPtr += 4; +} + +static void Task_WaitAndPlaySE(u8 taskId) +{ + if (gTasks[taskId].tFramesToWait-- <= 0) + { + PlaySE12WithPanning(gTasks[taskId].tSongId, gTasks[taskId].tPanning); + DestroyTask(taskId); + gAnimSoundTaskCount--; + } +} + +#undef tSongId +#undef tPanning +#undef tFramesToWait + +static void ScriptCmd_createsoundtask(void) +{ + TaskFunc func; + u8 numArgs, taskId; + s32 i; + + sBattleAnimScriptPtr++; + func = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 4; + numArgs = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + for (i = 0; i < numArgs; i++) + { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + taskId = CreateTask(func, 1); + func(taskId); + gAnimSoundTaskCount++; +} + +static void ScriptCmd_waitsound(void) +{ + if (gAnimSoundTaskCount != 0) + { + sSoundAnimFramesToWait = 0; + gAnimFramesToWait = 1; + } + else if (IsSEPlaying()) + { + if (++sSoundAnimFramesToWait > 90) + { + m4aMPlayStop(&gMPlayInfo_SE1); + m4aMPlayStop(&gMPlayInfo_SE2); + sSoundAnimFramesToWait = 0; + } + else + { + gAnimFramesToWait = 1; + } + } + else + { + sSoundAnimFramesToWait = 0; + sBattleAnimScriptPtr++; + gAnimFramesToWait = 0; + } +} + +static void ScriptCmd_jumpargeq(void) +{ + u8 argId; + s16 valueToCheck; + + sBattleAnimScriptPtr++; + argId = sBattleAnimScriptPtr[0]; + valueToCheck = T1_READ_16(sBattleAnimScriptPtr + 1); + + if (valueToCheck == gBattleAnimArgs[argId]) + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr + 3); + else + sBattleAnimScriptPtr += 7; +} + +static void ScriptCmd_jumpifcontest(void) +{ + sBattleAnimScriptPtr++; + if (IsContest()) + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); + else + sBattleAnimScriptPtr += 4; +} + +static void ScriptCmd_monbgprio_28(void) +{ + u8 wantedBattler; + u8 battlerId; + u8 battlerPosition; + + wantedBattler = sBattleAnimScriptPtr[1]; + sBattleAnimScriptPtr += 2; + + if (wantedBattler != ANIM_ATTACKER) + battlerId = gBattleAnimTarget; + else + battlerId = gBattleAnimAttacker; + + battlerPosition = GetBattlerPosition(battlerId); + if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) + { + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); + } +} + +static void ScriptCmd_monbgprio_29(void) +{ + sBattleAnimScriptPtr++; + if (!IsContest()) + { + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); + } +} + +static void ScriptCmd_monbgprio_2A(void) +{ + u8 wantedBattler; + u8 battlerPosition; + u8 battlerId; + + wantedBattler = sBattleAnimScriptPtr[1]; + sBattleAnimScriptPtr += 2; + if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget)) + { + if (wantedBattler != ANIM_ATTACKER) + battlerId = gBattleAnimTarget; + else + battlerId = gBattleAnimAttacker; + + battlerPosition = GetBattlerPosition(battlerId); + if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) + { + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); + } + } +} + +static void ScriptCmd_invisible(void) +{ + u8 spriteId; + + spriteId = GetAnimBattlerSpriteId(sBattleAnimScriptPtr[1]); + if (spriteId != 0xFF) + gSprites[spriteId].invisible = TRUE; + + sBattleAnimScriptPtr += 2; +} + +static void ScriptCmd_visible(void) +{ + u8 spriteId; + + spriteId = GetAnimBattlerSpriteId(sBattleAnimScriptPtr[1]); + if (spriteId != 0xFF) + gSprites[spriteId].invisible = FALSE; + + sBattleAnimScriptPtr += 2; +} + +static void ScriptCmd_doublebattle_2D(void) +{ + u8 wantedBattler; + u8 r4; + u8 spriteId; + + wantedBattler = sBattleAnimScriptPtr[1]; + sBattleAnimScriptPtr += 2; + if (!IsContest() && IsDoubleBattle() + && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + { + if (wantedBattler == ANIM_ATTACKER) + { + r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + } + else + { + r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + } + if (spriteId != 0xFF) + { + gSprites[spriteId].invisible = FALSE; + if (r4 == 2) + gSprites[spriteId].oam.priority = 3; + + if (r4 == 1) + sub_8073128(FALSE); + else + sub_8073128(TRUE); + } + } +} + +static void ScriptCmd_doublebattle_2E(void) +{ + u8 wantedBattler; + u8 r4; + u8 spriteId; + + wantedBattler = sBattleAnimScriptPtr[1]; + sBattleAnimScriptPtr += 2; + if (!IsContest() && IsDoubleBattle() + && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + { + if (wantedBattler == ANIM_ATTACKER) + { + r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + } + else + { + r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + } + + if (spriteId != 0xFF && r4 == 2) + gSprites[spriteId].oam.priority = 2; + } +} + +static void ScriptCmd_stopsound(void) +{ + m4aMPlayStop(&gMPlayInfo_SE1); + m4aMPlayStop(&gMPlayInfo_SE2); + sBattleAnimScriptPtr++; +} |