From 72f0a079a9221e314e7eecf0e920313bf83d32ac Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 19 Nov 2018 09:28:55 -0600 Subject: [PATCH] Decompile all of battle_anim_utility_funcs --- asm/battle_anim_utility_funcs.s | 3059 --------------------- data/battle_anim_scripts.s | 14 +- include/battle.h | 15 +- include/battle_anim.h | 17 +- include/contest.h | 2 +- include/gba/io_reg.h | 2 + include/graphics.h | 14 + ld_script.txt | 2 +- src/battle_anim.c | 14 +- src/battle_anim_80A5C6C.c | 14 +- src/battle_anim_80A9C70.c | 2 - src/battle_anim_sound_tasks.c | 6 +- src/battle_anim_utility_funcs.c | 1050 +++++++ src/battle_arena.c | 3 - src/battle_bg.c | 5 - src/battle_controller_link_opponent.c | 2 - src/battle_controller_link_partner.c | 2 - src/battle_controller_opponent.c | 2 - src/battle_controller_player.c | 2 - src/battle_controller_player_partner.c | 2 - src/battle_controller_recorded_opponent.c | 2 - src/battle_controller_recorded_player.c | 2 - src/battle_controller_safari.c | 3 - src/battle_controller_wally.c | 2 - src/battle_dome.c | 8 - src/battle_main.c | 12 - src/battle_script_commands.c | 5 - src/battle_transition.c | 4 +- src/contest.c | 20 +- src/evolution_scene.c | 9 - src/graphics.c | 22 +- src/reshow_battle_screen.c | 9 - src/scanline_effect.c | 10 +- src/title_screen.c | 3 +- sym_ewram.txt | 3 +- 35 files changed, 1137 insertions(+), 3206 deletions(-) delete mode 100644 asm/battle_anim_utility_funcs.s diff --git a/asm/battle_anim_utility_funcs.s b/asm/battle_anim_utility_funcs.s deleted file mode 100644 index 138d303ac..000000000 --- a/asm/battle_anim_utility_funcs.s +++ /dev/null @@ -1,3059 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8116620 -sub_8116620: @ 8116620 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r4, =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r4, r1] - bl sub_811583C - adds r6, r0, 0 - ldrh r3, [r4] - lsls r3, 16 - asrs r0, r3, 23 - movs r4, 0x1 - ands r0, r4 - asrs r1, r3, 24 - ands r1, r4 - asrs r2, r3, 25 - ands r2, r4 - asrs r3, 26 - ands r3, r4 - bl sub_80A76C4 - orrs r6, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_8116874 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116620 - - thumb_func_start sub_8116664 -sub_8116664: @ 8116664 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - mov r1, sp - movs r0, 0xFF - strb r0, [r1, 0x1] - movs r0, 0x1 - bl sub_811583C - adds r5, r0, 0 - ldr r0, =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x7 - bhi _0811670E - lsls r0, 2 - ldr r1, =_08116698 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08116698: - .4byte _081166BA - .4byte _081166C6 - .4byte _081166B8 - .4byte _081166C4 - .4byte _081166D4 - .4byte _081166EC - .4byte _081166F4 - .4byte _08116700 -_081166B8: - movs r5, 0 -_081166BA: - mov r0, sp - ldr r1, =gBattleAnimAttacker - b _081166CA - .pool -_081166C4: - movs r5, 0 -_081166C6: - mov r0, sp - ldr r1, =gBattleAnimTarget -_081166CA: - ldrb r1, [r1] - strb r1, [r0] - b _0811670E - .pool -_081166D4: - mov r1, sp - ldr r0, =gBattleAnimAttacker - ldrb r0, [r0] - strb r0, [r1] - ldr r0, =gBattleAnimTarget - ldrb r0, [r0] - strb r0, [r1, 0x1] - b _0811670E - .pool -_081166EC: - mov r1, sp - movs r0, 0xFF - strb r0, [r1] - b _0811670E -_081166F4: - movs r5, 0 - mov r2, sp - ldr r0, =gBattleAnimAttacker - b _08116706 - .pool -_08116700: - movs r5, 0 - mov r2, sp - ldr r0, =gBattleAnimTarget -_08116706: - ldrb r0, [r0] - movs r1, 0x2 - eors r0, r1 - strb r0, [r2] -_0811670E: - movs r4, 0 - mov r6, sp -_08116712: - ldrb r0, [r6] - cmp r4, r0 - beq _0811673C - ldrb r0, [r6, 0x1] - cmp r4, r0 - beq _0811673C - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _0811673C - adds r0, r4, 0 - bl sub_80A77AC - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x80 - lsls r1, 9 - lsls r1, r0 - orrs r5, r1 -_0811673C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _08116712 - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_8116874 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116664 - - thumb_func_start sub_811675C -sub_811675C: @ 811675C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - bl sub_811583C - adds r2, r0, 0 - ldr r0, =gBattleTerrain - ldrb r0, [r0] - cmp r0, 0x9 - bhi _08116832 - lsls r0, 2 - ldr r1, =_0811678C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_0811678C: - .4byte _081167B4 - .4byte _081167C4 - .4byte _081167D0 - .4byte _081167E0 - .4byte _081167EC - .4byte _081167FC - .4byte _0811680C - .4byte _0811681C - .4byte _0811682C - .4byte _0811682C -_081167B4: - ldr r1, =gBattleAnimArgs - ldr r0, =0x00000b0c - b _08116830 - .pool -_081167C4: - ldr r1, =gBattleAnimArgs - movs r0, 0x9E - lsls r0, 4 - b _08116830 - .pool -_081167D0: - ldr r1, =gBattleAnimArgs - ldr r0, =0x00002f1e - b _08116830 - .pool -_081167E0: - ldr r1, =gBattleAnimArgs - movs r0, 0x90 - lsls r0, 7 - b _08116830 - .pool -_081167EC: - ldr r1, =gBattleAnimArgs - ldr r0, =0x00007ecb - b _08116830 - .pool -_081167FC: - ldr r1, =gBattleAnimArgs - ldr r0, =0x00007ecb - b _08116830 - .pool -_0811680C: - ldr r1, =gBattleAnimArgs - ldr r0, =0x00002a16 - b _08116830 - .pool -_0811681C: - ldr r1, =gBattleAnimArgs - ldr r0, =0x00000d2e - b _08116830 - .pool -_0811682C: - ldr r1, =gBattleAnimArgs - ldr r0, =0x00007fff -_08116830: - strh r0, [r1, 0x8] -_08116832: - adds r0, r4, 0 - adds r1, r2, 0 - bl sub_8116874 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_811675C - - thumb_func_start AnimTask_BlendParticle -AnimTask_BlendParticle: @ 8116848 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, =gBattleAnimArgs - ldrh r0, [r0] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r1, 0x1 - lsls r1, r0 - adds r0, r4, 0 - bl sub_8116874 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end AnimTask_BlendParticle - - thumb_func_start sub_8116874 -sub_8116874: @ 8116874 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r3, =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r3 - strh r1, [r2, 0x8] - lsrs r1, 16 - strh r1, [r2, 0xA] - ldr r3, =gBattleAnimArgs - ldrh r1, [r3, 0x2] - strh r1, [r2, 0xC] - ldrh r1, [r3, 0x4] - strh r1, [r2, 0xE] - ldrh r1, [r3, 0x6] - strh r1, [r2, 0x10] - ldrh r1, [r3, 0x8] - strh r1, [r2, 0x12] - ldrh r1, [r3, 0x4] - strh r1, [r2, 0x1C] - ldr r1, =sub_81168B8 - str r1, [r2] - bl _call_via_r1 - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116874 - - thumb_func_start sub_81168B8 -sub_81168B8: @ 81168B8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 - ldr r2, =gTasks - lsls r5, r7, 2 - adds r0, r5, r7 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0x1A] - mov r8, r0 - movs r4, 0x1A - ldrsh r1, [r3, r4] - movs r4, 0xC - ldrsh r0, [r3, r4] - mov r9, r2 - cmp r1, r0 - bne _0811694E - strh r6, [r3, 0x1A] - movs r0, 0x8 - ldrsh r4, [r3, r0] - movs r1, 0xA - ldrsh r0, [r3, r1] - lsls r0, 16 - orrs r4, r0 - mov r8, r5 - cmp r4, 0 - beq _0811691A - adds r5, r3, 0 -_081168F8: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0811690C - ldrb r2, [r5, 0x1C] - ldrh r3, [r5, 0x12] - adds r0, r6, 0 - movs r1, 0x10 - bl BlendPalette -_0811690C: - adds r0, r6, 0 - adds r0, 0x10 - lsls r0, 16 - lsrs r6, r0, 16 - lsrs r4, 1 - cmp r4, 0 - bne _081168F8 -_0811691A: - mov r4, r8 - adds r0, r4, r7 - lsls r0, 3 - mov r1, r9 - adds r2, r0, r1 - ldrh r0, [r2, 0x1C] - movs r4, 0x1C - ldrsh r3, [r2, r4] - movs r4, 0x10 - ldrsh r1, [r2, r4] - cmp r3, r1 - bge _0811693C - adds r0, 0x1 - strh r0, [r2, 0x1C] - b _08116954 - .pool -_0811693C: - cmp r3, r1 - ble _08116946 - subs r0, 0x1 - strh r0, [r2, 0x1C] - b _08116954 -_08116946: - adds r0, r7, 0 - bl DestroyAnimVisualTask - b _08116954 -_0811694E: - mov r0, r8 - adds r0, 0x1 - strh r0, [r3, 0x1A] -_08116954: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81168B8 - - thumb_func_start sub_8116960 -sub_8116960: @ 8116960 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r4, =gBattleAnimArgs - ldrb r0, [r4] - ldrb r1, [r4, 0x2] - ldrb r2, [r4, 0x4] - ldrb r3, [r4, 0x6] - ldrb r4, [r4, 0x8] - str r4, [sp] - bl BeginHardwarePaletteFade - ldr r1, =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, =sub_81169A0 - str r1, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116960 - - thumb_func_start sub_81169A0 -sub_81169A0: @ 81169A0 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081169B8 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_081169B8: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81169A0 - - thumb_func_start sub_81169C0 -sub_81169C0: @ 81169C0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks - adds r1, r0 - ldr r2, =gBattleAnimArgs - ldrh r0, [r2] - movs r3, 0 - strh r0, [r1, 0x8] - strh r3, [r1, 0xA] - ldrh r0, [r2, 0x2] - strh r0, [r1, 0xC] - ldrh r0, [r2, 0x4] - strh r0, [r1, 0xE] - ldrh r0, [r2, 0x6] - strh r0, [r1, 0x10] - strh r3, [r1, 0x12] - ldr r0, =sub_81169F8 - str r0, [r1] - bx lr - .pool - thumb_func_end sub_81169C0 - - thumb_func_start sub_81169F8 -sub_81169F8: @ 81169F8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks - adds r4, r0, r1 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08116ABC - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08116A28 - subs r0, r1, 0x1 - strh r0, [r4, 0xA] - b _08116ACA - .pool -_08116A28: - ldrb r0, [r4, 0x8] - bl duplicate_obj_of_side_rel2move_in_transparent_mode - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - blt _08116AA6 - ldr r6, =gSprites - movs r1, 0x14 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r3, r1, r6 - movs r2, 0x8 - ldrsh r0, [r4, r2] - movs r2, 0x2 - cmp r0, 0 - beq _08116A50 - movs r2, 0x1 -_08116A50: - lsls r2, 2 - ldrb r1, [r3, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x5] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrh r1, [r4, 0xE] - strh r1, [r0, 0x2E] - movs r2, 0x14 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r5, [r0, 0x30] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0x5 - strh r1, [r0, 0x32] - movs r2, 0x14 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r6, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, =sub_8116AD0 - str r1, [r0] - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] -_08116AA6: - ldrh r0, [r4, 0x10] - subs r0, 0x1 - strh r0, [r4, 0x10] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0xA] - b _08116ACA - .pool -_08116ABC: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08116ACA - adds r0, r2, 0 - bl DestroyAnimVisualTask -_08116ACA: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81169F8 - - thumb_func_start sub_8116AD0 -sub_8116AD0: @ 8116AD0 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08116AE4 - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - b _08116B08 -_08116AE4: - ldr r3, =gTasks - movs r0, 0x32 - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x30 - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - adds r0, r4, 0 - bl obj_delete_but_dont_free_vram -_08116B08: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116AD0 - - thumb_func_start sub_8116B14 -sub_8116B14: @ 8116B14 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r7, 0 - ldr r0, =gBattle_WIN0H - strh r7, [r0] - ldr r0, =gBattle_WIN0V - strh r7, [r0] - ldr r1, =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - ldr r1, =0x00000c08 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0xA - bl GetGpuReg - add r4, sp, 0x10 - strh r0, [r4] - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - mov r8, r0 - ands r0, r1 - strb r0, [r4] - mov r2, sp - adds r2, 0x11 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2] - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08116BA2 - ldrb r1, [r4] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg -_08116BA2: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _08116C26 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08116C26 - ldr r5, =gBattleAnimAttacker - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08116BD2 - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _08116C26 -_08116BD2: - ldrb r0, [r5] - movs r6, 0x2 - eors r0, r6 - bl IsBattlerSpriteVisible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08116C26 - ldr r3, =gSprites - ldr r1, =gBattlerSpriteIds - ldrb r0, [r5] - eors r0, r6 - adds r0, r1 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldrb r1, [r4] - mov r0, r8 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4] - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg - movs r7, 0x1 -_08116C26: - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _08116C64 - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x18] - ldrh r5, [r0] - b _08116CAC - .pool -_08116C64: - ldr r4, =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08116C90 - ldr r1, =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gEnemyParty - b _08116CA0 - .pool -_08116C90: - ldr r1, =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty -_08116CA0: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 -_08116CAC: - movs r0, 0 - bl GetAnimBattlerSpriteId - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, =gBattleAnimAttacker - ldrb r0, [r0] - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_80A89C8 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - mov r0, sp - bl sub_80A6B30 - ldr r1, =gUnknown_08C20684 - mov r0, sp - movs r2, 0 - bl sub_80A6D60 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, =gUnknown_08C20668 - mov r2, sp - ldrh r2, [r2, 0xA] - bl sub_80A6CC0 - ldr r0, =gUnknown_08597418 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - adds r1, 0x1 - movs r2, 0x2 - bl LoadPalette - ldr r2, =gBattle_BG1_X - ldr r0, =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x20] - negs r0, r0 - adds r0, 0x20 - strh r0, [r2] - ldr r2, =gBattle_BG1_Y - ldrh r0, [r1, 0x22] - negs r0, r0 - adds r0, 0x20 - strh r0, [r2] - ldr r1, =gTasks - mov r2, r9 - lsls r0, r2, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - strh r5, [r0, 0x8] - strh r7, [r0, 0x14] - ldr r1, =sub_8116D64 - str r1, [r0] - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116B14 - - thumb_func_start sub_8116D64 -sub_8116D64: @ 8116D64 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - ldrh r0, [r5, 0x1C] - adds r0, 0x4 - movs r1, 0 - mov r8, r1 - strh r0, [r5, 0x1C] - ldr r7, =gBattle_BG1_Y - ldrh r2, [r7] - subs r1, r2, 0x4 - strh r1, [r7] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x40 - bne _08116E86 - mov r0, r8 - strh r0, [r5, 0x1C] - adds r0, r2, 0 - adds r0, 0x3C - strh r0, [r7] - ldrh r0, [r5, 0x1E] - adds r0, 0x1 - strh r0, [r5, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _08116E86 - movs r0, 0 - bl sub_80A477C - ldr r0, =gBattle_WIN0H - mov r1, r8 - strh r1, [r0] - ldr r0, =gBattle_WIN0V - strh r1, [r0] - ldr r4, =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08116DF6 - movs r0, 0xA - bl GetGpuReg - add r1, sp, 0x10 - strh r0, [r1] - ldrb r2, [r1] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrh r1, [r1] - movs r0, 0xA - bl SetGpuReg -_08116DF6: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - eors r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r4, =gSprites - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - mov r0, sp - bl sub_80A6B30 - mov r0, sp - ldrb r0, [r0, 0x9] - bl sub_80A6C68 - movs r1, 0x14 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _08116E7C - ldr r2, =gBattlerSpriteIds - ldr r0, =gBattleAnimAttacker - ldrb r1, [r0] - movs r0, 0x2 - eors r0, r1 - adds r0, r2 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] -_08116E7C: - mov r2, r8 - strh r2, [r7] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_08116E86: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116D64 - - thumb_func_start sub_8116EB4 -sub_8116EB4: @ 8116EB4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, =gUnknown_0203A110 - movs r0, 0x18 - bl AllocZeroed - str r0, [r4] - movs r2, 0 - ldr r3, =gBattleAnimArgs -_08116EC8: - ldr r1, [r4] - lsls r0, r2, 1 - adds r1, 0x4 - adds r1, r0 - adds r0, r3 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _08116EC8 - ldr r0, =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_8116F04 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116EB4 - - thumb_func_start sub_8116F04 -sub_8116F04: @ 8116F04 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, =gUnknown_0203A110 - ldr r1, [r0] - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _08116F24 - ldr r0, =gBattleAnimAttacker - b _08116F26 - .pool -_08116F24: - ldr r0, =gBattleAnimTarget -_08116F26: - ldrb r0, [r0] - strb r0, [r1] - ldr r4, =gUnknown_0203A110 - ldr r2, [r4] - ldrb r0, [r2] - movs r1, 0x2 - eors r0, r1 - strb r0, [r2, 0x1] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08116F56 - ldr r1, [r4] - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08116F5C - ldrb r0, [r1, 0x1] - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _08116F5C -_08116F56: - ldr r1, [r4] - movs r0, 0 - strh r0, [r1, 0xA] -_08116F5C: - ldr r0, =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, =gBattle_WIN0V - strh r1, [r0] - ldr r1, =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08116FBA - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute -_08116FBA: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _08117036 - ldr r4, =gUnknown_0203A110 - ldr r1, [r4] - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _08117036 - ldrb r0, [r1] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08116FEC - ldr r0, [r4] - ldrb r0, [r0] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _08117036 -_08116FEC: - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl IsBattlerSpriteVisible - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bne _08117036 - ldr r3, =gSprites - ldr r1, =gBattlerSpriteIds - ldr r0, [r4] - ldrb r0, [r0, 0x1] - adds r0, r1 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - ldr r0, [r4] - strb r5, [r0, 0x2] -_08117036: - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _08117078 - ldr r0, =gUnknown_0203A110 - ldr r1, [r0] - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x18] - ldrh r0, [r0] - b _081170C4 - .pool -_08117078: - ldr r4, =gUnknown_0203A110 - ldr r0, [r4] - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _081170A8 - ldr r1, =gBattlerPartyIndexes - ldr r0, [r4] - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gEnemyParty - b _081170BA - .pool -_081170A8: - ldr r1, =gBattlerPartyIndexes - ldr r0, [r4] - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty -_081170BA: - adds r0, r1 - movs r1, 0xB - bl GetMonData - ldr r1, [r4] -_081170C4: - strh r0, [r1, 0x14] - ldr r0, =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_81170EC - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8116F04 - - thumb_func_start sub_81170EC -sub_81170EC: @ 81170EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0 - mov r8, r0 - ldr r6, =gBattlerSpriteIds - ldr r4, =gUnknown_0203A110 - ldr r2, [r4] - ldrb r0, [r2] - adds r1, r0, r6 - ldrb r1, [r1] - ldrh r2, [r2, 0x14] - bl sub_80A89C8 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, [r4] - movs r1, 0xA - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _0811712E - ldrb r0, [r2, 0x1] - adds r1, r0, r6 - ldrb r1, [r1] - ldrh r2, [r2, 0x14] - bl sub_80A89C8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 -_0811712E: - mov r0, sp - bl sub_80A6B30 - ldr r0, [r4] - movs r4, 0x4 - ldrsh r0, [r0, r4] - cmp r0, 0 - bne _08117158 - ldr r1, =gUnknown_08C2D930 - mov r0, sp - movs r2, 0 - bl sub_80A6D60 - b _08117162 - .pool -_08117158: - ldr r1, =gUnknown_08C2DA4C - mov r0, sp - movs r2, 0 - bl sub_80A6D60 -_08117162: - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, =gUnknown_08C2D720 - mov r2, sp - ldrh r2, [r2, 0xA] - bl sub_80A6CC0 - ldr r0, =gUnknown_0203A110 - ldr r0, [r0] - movs r1, 0x6 - ldrsh r0, [r0, r1] - cmp r0, 0x6 - bhi _081171F8 - lsls r0, 2 - ldr r1, =_08117198 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08117198: - .4byte _081171B4 - .4byte _081171BC - .4byte _081171C4 - .4byte _081171CC - .4byte _081171D4 - .4byte _081171DC - .4byte _081171E4 -_081171B4: - ldr r0, =gUnknown_08C2DB88 - b _081171E6 - .pool -_081171BC: - ldr r0, =gUnknown_08C2DB68 - b _081171E6 - .pool -_081171C4: - ldr r0, =gUnknown_08C2DBA8 - b _081171E6 - .pool -_081171CC: - ldr r0, =gUnknown_08C2DBC8 - b _081171E6 - .pool -_081171D4: - ldr r0, =gUnknown_08C2DC08 - b _081171E6 - .pool -_081171DC: - ldr r0, =gUnknown_08C2DC28 - b _081171E6 - .pool -_081171E4: - ldr r0, =gUnknown_08C2DC48 -_081171E6: - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - b _08117206 - .pool -_081171F8: - ldr r0, =gUnknown_08C2DBE8 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette -_08117206: - ldr r3, =gBattle_BG1_X - movs r2, 0 - strh r2, [r3] - ldr r0, =gBattle_BG1_Y - strh r2, [r0] - ldr r1, =gUnknown_0203A110 - ldr r0, [r1] - movs r4, 0x4 - ldrsh r0, [r0, r4] - adds r4, r1, 0 - cmp r0, 0x1 - bne _08117248 - movs r0, 0x40 - strh r0, [r3] - ldr r2, =gTasks - lsls r3, r5, 2 - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - ldr r1, =0x0000fffd - b _08117254 - .pool -_08117248: - ldr r2, =gTasks - lsls r3, r5, 2 - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0x3 -_08117254: - strh r1, [r0, 0xA] - ldr r0, [r4] - movs r1, 0xC - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08117274 - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0xA - strh r1, [r0, 0x10] - movs r1, 0x14 - b _08117280 - .pool -_08117274: - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0xD - strh r1, [r0, 0x10] - movs r1, 0x1E -_08117280: - strh r1, [r0, 0x12] - adds r1, r3, r5 - lsls r1, 3 - adds r1, r2 - strh r7, [r1, 0x8] - ldr r3, [r4] - ldrh r0, [r3, 0xA] - strh r0, [r1, 0xC] - mov r4, r8 - strh r4, [r1, 0xE] - ldrb r0, [r3, 0x2] - strh r0, [r1, 0x14] - ldr r2, =gBattlerSpriteIds - ldrb r0, [r3, 0x1] - adds r0, r2 - ldrb r0, [r0] - strh r0, [r1, 0x16] - ldr r0, =sub_81172EC - str r0, [r1] - movs r1, 0x4 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _081172CC - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning2 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xEF - bl PlaySE12WithPanning - b _081172E0 - .pool -_081172CC: - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning2 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xF5 - bl PlaySE12WithPanning -_081172E0: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81170EC - - thumb_func_start sub_81172EC -sub_81172EC: @ 81172EC - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r2, =gBattle_BG1_Y - ldr r1, =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - ldrh r0, [r5, 0xA] - ldrh r1, [r2] - adds r0, r1 - strh r0, [r2] - movs r0, 0x26 - ldrsh r2, [r5, r0] - cmp r2, 0x1 - beq _08117362 - cmp r2, 0x1 - bgt _08117320 - cmp r2, 0 - beq _0811732A - b _08117478 - .pool -_08117320: - cmp r2, 0x2 - beq _08117378 - cmp r2, 0x3 - beq _081173B6 - b _08117478 -_0811732A: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - cmp r0, 0 - bgt _08117338 - b _08117478 -_08117338: - strh r2, [r5, 0x1E] - ldrh r1, [r5, 0x20] - adds r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r2, 0x10 - ldrsh r0, [r5, r2] - cmp r1, r0 - beq _08117360 - b _08117478 -_08117360: - b _081173AE -_08117362: - ldrh r0, [r5, 0x1C] - adds r0, 0x1 - strh r0, [r5, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x12 - ldrsh r1, [r5, r2] - cmp r0, r1 - beq _08117376 - b _08117478 -_08117376: - b _081173AE -_08117378: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - cmp r0, 0 - ble _08117478 - movs r0, 0 - strh r0, [r5, 0x1E] - ldrh r1, [r5, 0x20] - subs r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x20 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _08117478 - movs r0, 0 - bl sub_80A477C -_081173AE: - ldrh r0, [r5, 0x26] - adds r0, 0x1 - strh r0, [r5, 0x26] - b _08117478 -_081173B6: - ldr r0, =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, =gBattle_WIN0V - strh r1, [r0] - ldr r4, =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _081173E6 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute -_081173E6: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - eors r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, =gSprites - adds r0, r4 - bl DestroySprite - movs r1, 0xC - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _0811743A - movs r2, 0xE - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite -_0811743A: - movs r1, 0x14 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _08117466 - movs r2, 0x16 - ldrsh r0, [r5, r2] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] -_08117466: - ldr r4, =gUnknown_0203A110 - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_08117478: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81172EC - - thumb_func_start sub_8117494 -sub_8117494: @ 8117494 - push {r4-r6,lr} - sub sp, 0xC - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x1 - bl sub_80A76C4 - adds r6, r0, 0 - movs r1, 0 - bl sub_81175C4 - ldr r0, =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - lsrs r0, r6, 16 - movs r5, 0 - strh r0, [r4, 0x24] - str r5, [sp] - str r5, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80A75AC - adds r6, r0, 0 - ldr r1, =0x0000ffff - ands r6, r1 - adds r0, r6, 0 - bl sub_81175C4 - strh r6, [r4, 0x26] - strh r5, [r4, 0x8] - strh r5, [r4, 0xA] - ldr r0, =sub_8117500 - str r0, [r4] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117494 - - thumb_func_start sub_8117500 -sub_8117500: @ 8117500 - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _08117544 - cmp r1, 0x1 - bgt _08117528 - cmp r1, 0 - beq _0811752E - b _081175BE - .pool -_08117528: - cmp r1, 0x2 - beq _081175B8 - b _081175BE -_0811752E: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _081175BE - strh r1, [r4, 0xA] - movs r0, 0x10 - strh r0, [r4, 0xC] - b _081175AC -_08117544: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _081175BE - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - movs r5, 0 - movs r6, 0x1 -_08117560: - movs r1, 0x26 - ldrsh r0, [r4, r1] - asrs r0, r5 - ands r0, r6 - cmp r0, 0 - beq _0811757A - lsls r0, r5, 20 - lsrs r0, 16 - ldrb r2, [r4, 0xC] - movs r1, 0x10 - ldr r3, =0x0000ffff - bl BlendPalette -_0811757A: - movs r1, 0x24 - ldrsh r0, [r4, r1] - asrs r0, r5 - ands r0, r6 - cmp r0, 0 - beq _0811759A - lsls r0, r5, 20 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - ldrb r2, [r4, 0xC] - movs r1, 0x10 - movs r3, 0 - bl BlendPalette -_0811759A: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0xF - bls _08117560 - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _081175BE -_081175AC: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _081175BE - .pool -_081175B8: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_081175BE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8117500 - - thumb_func_start sub_81175C4 -sub_81175C4: @ 81175C4 - push {r4-r6,lr} - adds r3, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - movs r2, 0 -_081175CE: - movs r0, 0x1 - ands r0, r3 - lsrs r4, r3, 1 - adds r5, r2, 0x1 - cmp r0, 0 - beq _081175FA - lsls r0, r2, 20 - lsrs r2, r0, 16 - adds r0, r2, 0 - adds r0, 0x10 - cmp r2, r0 - bge _081175FA - ldr r1, =gPlttBufferFaded - adds r3, r0, 0 -_081175EA: - lsls r0, r2, 1 - adds r0, r1 - strh r6, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r3 - blt _081175EA -_081175FA: - adds r3, r4, 0 - lsls r0, r5, 16 - lsrs r2, r0, 16 - cmp r2, 0x1F - bls _081175CE - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81175C4 - - thumb_func_start sub_8117610 -sub_8117610: @ 8117610 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r4, 0 - movs r2, 0 - ldr r0, =gBattleAnimAttacker - ldrb r3, [r0] - movs r5, 0x1 -_08117620: - cmp r3, r2 - beq _0811762E - adds r1, r2, 0 - adds r1, 0x10 - adds r0, r5, 0 - lsls r0, r1 - orrs r4, r0 -_0811762E: - adds r2, 0x1 - cmp r2, 0x3 - bls _08117620 - movs r2, 0x5 - ldr r0, =gBattleAnimArgs - adds r1, r0, 0 - adds r1, 0x8 -_0811763C: - ldrh r0, [r1] - strh r0, [r1, 0x2] - subs r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bne _0811763C - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_8116874 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117610 - - thumb_func_start sub_8117660 -sub_8117660: @ 8117660 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0 - bl sub_80A6DAC - ldr r0, =sub_81176D8 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0811769C - ldr r0, =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0811769C - ldrh r0, [r4] - negs r0, r0 - strh r0, [r4] - ldrh r0, [r4, 0x2] - negs r0, r0 - strh r0, [r4, 0x2] -_0811769C: - ldr r0, =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r2, =gBattleAnimArgs - ldrh r0, [r2] - strh r0, [r1, 0xA] - ldrh r0, [r2, 0x2] - strh r0, [r1, 0xC] - ldrh r0, [r2, 0x6] - strh r0, [r1, 0xE] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - adds r0, r6, 0 - bl DestroyAnimVisualTask - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117660 - - thumb_func_start sub_81176D8 -sub_81176D8: @ 81176D8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r3, [r1, 0xA] - ldrh r0, [r1, 0x1C] - adds r3, r0 - movs r4, 0 - mov r12, r4 - strh r3, [r1, 0x1C] - ldrh r2, [r1, 0xC] - ldrh r7, [r1, 0x1E] - adds r2, r7 - strh r2, [r1, 0x1E] - ldr r6, =gBattle_BG3_X - lsls r0, r3, 16 - asrs r0, 24 - ldrh r4, [r6] - adds r0, r4 - strh r0, [r6] - ldr r4, =gBattle_BG3_Y - lsls r0, r2, 16 - asrs r0, 24 - ldrh r7, [r4] - adds r0, r7 - strh r0, [r4] - movs r0, 0xFF - ands r3, r0 - strh r3, [r1, 0x1C] - ands r2, r0 - strh r2, [r1, 0x1E] - ldr r0, =gBattleAnimArgs - movs r3, 0xE - ldrsh r2, [r0, r3] - movs r7, 0xE - ldrsh r0, [r1, r7] - cmp r2, r0 - bne _0811773E - mov r0, r12 - strh r0, [r6] - strh r0, [r4] - movs r0, 0x1 - bl sub_80A6DAC - adds r0, r5, 0 - bl DestroyTask -_0811773E: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81176D8 - - thumb_func_start AnimTask_IsAttackerOpponentSide -AnimTask_IsAttackerOpponentSide: @ 8117754 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - ldr r1, =gBattleAnimArgs - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0xE] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end AnimTask_IsAttackerOpponentSide - - thumb_func_start AnimTask_IsTargetOpponentSide -AnimTask_IsTargetOpponentSide: @ 8117780 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - ldr r1, =gBattleAnimArgs - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0xE] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end AnimTask_IsTargetOpponentSide - - thumb_func_start AnimTask_IsTargetPartner -AnimTask_IsTargetPartner: @ 81177AC - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r5, =gBattleAnimArgs - movs r4, 0 - ldr r0, =gBattleAnimAttacker - ldrb r2, [r0] - movs r0, 0x2 - ldr r1, =gBattleAnimTarget - eors r0, r2 - ldrb r1, [r1] - cmp r0, r1 - bne _081177C8 - movs r4, 0x1 -_081177C8: - strh r4, [r5, 0xE] - adds r0, r3, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end AnimTask_IsTargetPartner - - thumb_func_start sub_81177E4 -sub_81177E4: @ 81177E4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r6, =gSprites -_081177EE: - ldr r0, =gBattleAnimAttacker - ldrb r0, [r0] - cmp r4, r0 - beq _0811782C - lsls r0, r4, 24 - lsrs r0, 24 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _0811782C - ldr r0, =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r6 - ldr r1, =gBattleAnimArgs - adds r2, 0x3E - movs r0, 0x1 - ldrb r3, [r1] - ands r3, r0 - lsls r3, 2 - ldrb r0, [r2] - movs r7, 0x5 - negs r7, r7 - adds r1, r7, 0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2] -_0811782C: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _081177EE - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81177E4 - - thumb_func_start sub_8117854 -sub_8117854: @ 8117854 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - ldr r1, [sp, 0x44] - ldr r4, [sp, 0x48] - ldr r5, [sp, 0x4C] - ldr r6, [sp, 0x50] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r2, 16 - lsrs r2, 16 - str r2, [sp, 0x14] - lsls r3, 24 - lsrs r7, r3, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp, 0x18] - lsls r5, 24 - lsrs r5, 24 - str r5, [sp, 0x1C] - lsls r6, 24 - lsrs r6, 24 - mov r10, r6 - movs r0, 0 - str r0, [sp, 0x20] - movs r0, 0x2 - adds r6, r7, 0 - eors r6, r0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _081178B6 - mov r1, r8 - cmp r1, 0 - beq _081178BA - adds r0, r6, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _081178BA -_081178B6: - movs r2, 0 - mov r8, r2 -_081178BA: - ldr r0, =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, =gBattle_WIN0V - strh r1, [r0] - ldr r1, =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0xA - bl GetGpuReg - add r4, sp, 0x10 - strh r0, [r4] - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - mov r2, sp - adds r2, 0x11 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2] - ldrb r0, [r2] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r2] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08117930 - ldrb r0, [r4] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4] -_08117930: - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _08117964 - ldr r0, =gContestResources - ldr r0, [r0] - ldr r0, [r0, 0x18] - ldrh r4, [r0] - b _081179A2 - .pool -_08117964: - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08117988 - ldr r1, =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gEnemyParty - b _08117996 - .pool -_08117988: - ldr r1, =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty -_08117996: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 -_081179A2: - ldr r5, =gBattlerSpriteIds - adds r0, r7, r5 - ldrb r1, [r0] - adds r0, r7, 0 - adds r2, r4, 0 - bl sub_80A89C8 - lsls r0, 24 - lsrs r7, r0, 24 - mov r0, r8 - cmp r0, 0 - beq _081179CC - adds r0, r6, r5 - ldrb r1, [r0] - adds r0, r6, 0 - adds r2, r4, 0 - bl sub_80A89C8 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x20] -_081179CC: - mov r0, sp - bl sub_80A6B30 - mov r0, sp - ldr r1, [sp, 0x58] - movs r2, 0 - bl sub_80A6D60 - mov r0, sp - ldrb r0, [r0, 0x9] - mov r1, sp - ldrh r2, [r1, 0xA] - ldr r1, [sp, 0x54] - bl sub_80A6CC0 - mov r0, sp - ldrb r1, [r0, 0x8] - lsls r1, 4 - ldr r0, [sp, 0x5C] - movs r2, 0x20 - bl LoadCompressedPalette - ldr r0, =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, =gBattle_BG1_Y - strh r1, [r0] - ldr r1, =gTasks - mov r2, r9 - lsls r0, r2, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - mov r1, sp - ldrh r1, [r1, 0x14] - strh r1, [r0, 0xA] - mov r2, sp - ldrh r2, [r2, 0x18] - strh r2, [r0, 0x10] - mov r1, r10 - strh r1, [r0, 0x12] - mov r2, sp - ldrh r2, [r2, 0x1C] - strh r2, [r0, 0x14] - strh r7, [r0, 0x8] - mov r1, r8 - strh r1, [r0, 0xC] - mov r2, sp - ldrh r2, [r2, 0x20] - strh r2, [r0, 0xE] - ldr r1, =sub_8117A60 - str r1, [r0] - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117854 - - thumb_func_start sub_8117A60 -sub_8117A60: @ 8117A60 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r1 - movs r0, 0xA - ldrsh r2, [r3, r0] - adds r5, r1, 0 - cmp r2, 0 - bge _08117A7E - negs r2, r2 -_08117A7E: - ldrh r0, [r3, 0x22] - adds r4, r0, r2 - strh r4, [r3, 0x22] - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0 - bge _08117AA4 - ldr r2, =gBattle_BG1_Y - lsls r1, r4, 16 - asrs r1, 24 - ldrh r0, [r2] - subs r0, r1 - strh r0, [r2] - b _08117AB0 - .pool -_08117AA4: - ldr r1, =gBattle_BG1_Y - lsls r0, r4, 16 - asrs r0, 24 - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] -_08117AB0: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r5 - ldrh r1, [r5, 0x22] - movs r0, 0xFF - ands r0, r1 - movs r2, 0 - strh r0, [r5, 0x22] - movs r3, 0x26 - ldrsh r0, [r5, r3] - cmp r0, 0x1 - beq _08117B1A - cmp r0, 0x1 - bgt _08117AD8 - cmp r0, 0 - beq _08117ADE - b _08117C0C - .pool -_08117AD8: - cmp r0, 0x2 - beq _08117B34 - b _08117C0C -_08117ADE: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x14 - ldrsh r1, [r5, r3] - cmp r0, r1 - bge _08117AF2 - b _08117C0C -_08117AF2: - strh r2, [r5, 0x1E] - ldrh r1, [r5, 0x20] - adds r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x20 - ldrsh r1, [r5, r0] - movs r2, 0x10 - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _08117C0C - b _08117B2C -_08117B1A: - ldrh r0, [r5, 0x1C] - adds r0, 0x1 - strh r0, [r5, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x12 - ldrsh r1, [r5, r3] - cmp r0, r1 - bne _08117C0C -_08117B2C: - ldrh r0, [r5, 0x26] - adds r0, 0x1 - strh r0, [r5, 0x26] - b _08117C0C -_08117B34: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x14 - ldrsh r1, [r5, r3] - cmp r0, r1 - blt _08117C0C - strh r2, [r5, 0x1E] - ldrh r1, [r5, 0x20] - subs r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x20 - ldrsh r4, [r5, r0] - cmp r4, 0 - bne _08117C0C - movs r0, 0 - bl sub_80A477C - ldr r0, =gBattle_WIN0H - strh r4, [r0] - ldr r0, =gBattle_WIN0V - strh r4, [r0] - ldr r4, =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _08117BB2 - movs r0, 0xA - bl GetGpuReg - mov r1, sp - strh r0, [r1] - mov r2, sp - ldrb r1, [r2] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r2] - mov r0, sp - ldrh r1, [r0] - movs r0, 0xA - bl SetGpuReg -_08117BB2: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - eors r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r3, 0x8 - ldrsh r1, [r5, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, =gSprites - adds r0, r4 - bl DestroySprite - movs r1, 0xC - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08117C06 - movs r2, 0xE - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite -_08117C06: - adds r0, r6, 0 - bl DestroyAnimVisualTask -_08117C0C: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117A60 - - thumb_func_start AnimTask_GetBattleTerrain -AnimTask_GetBattleTerrain: @ 8117C24 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gBattleAnimArgs - ldr r1, =gBattleTerrain - ldrb r1, [r1] - strh r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .pool - thumb_func_end AnimTask_GetBattleTerrain - - thumb_func_start sub_8117C44 -sub_8117C44: @ 8117C44 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x80 - lsls r0, 6 - bl AllocZeroed - ldr r1, =gMonSpritesGfxPtr - ldr r1, [r1] - movs r2, 0xBE - lsls r2, 1 - adds r1, r2 - str r0, [r1] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117C44 - - thumb_func_start sub_8117C70 -sub_8117C70: @ 8117C70 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r6, =gMonSpritesGfxPtr - ldr r0, [r6] - movs r5, 0xBE - lsls r5, 1 - adds r0, r5 - ldr r0, [r0] - bl Free - ldr r0, [r6] - adds r0, r5 - movs r1, 0 - str r1, [r0] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117C70 - - thumb_func_start sub_8117CA0 -sub_8117CA0: @ 8117CA0 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08117CE4 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80A75AC - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08117CFC - movs r2, 0x1 -_08117CD2: - lsrs r1, 1 - adds r4, 0x1 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _08117CD2 - b _08117CFC - .pool -_08117CE4: - cmp r0, 0x1 - bne _08117CF0 - ldr r0, =gBattleAnimAttacker - b _08117CF6 - .pool -_08117CF0: - cmp r0, 0x2 - bne _08117CFC - ldr r0, =gBattleAnimTarget -_08117CF6: - ldrb r0, [r0] - adds r4, r0, 0 - adds r4, 0x10 -_08117CFC: - ldr r0, =gMonSpritesGfxPtr - ldr r1, [r0] - ldr r0, =gBattleAnimArgs - movs r2, 0x2 - ldrsh r0, [r0, r2] - movs r2, 0xBE - lsls r2, 1 - adds r1, r2 - ldr r1, [r1] - lsls r0, 5 - adds r0, r1 - lsls r1, r4, 5 - ldr r2, =gPlttBufferUnfaded - adds r1, r2 - movs r2, 0x20 - bl memcpy - adds r0, r5, 0 - bl DestroyAnimVisualTask - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117CA0 - - thumb_func_start sub_8117D3C -sub_8117D3C: @ 8117D3C - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08117D80 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80A75AC - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08117D98 - movs r2, 0x1 -_08117D6E: - lsrs r1, 1 - adds r4, 0x1 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _08117D6E - b _08117D98 - .pool -_08117D80: - cmp r0, 0x1 - bne _08117D8C - ldr r0, =gBattleAnimAttacker - b _08117D92 - .pool -_08117D8C: - cmp r0, 0x2 - bne _08117D98 - ldr r0, =gBattleAnimTarget -_08117D92: - ldrb r0, [r0] - adds r4, r0, 0 - adds r4, 0x10 -_08117D98: - lsls r0, r4, 5 - ldr r1, =gPlttBufferUnfaded - adds r0, r1 - ldr r1, =gMonSpritesGfxPtr - ldr r2, [r1] - ldr r1, =gBattleAnimArgs - movs r3, 0x2 - ldrsh r1, [r1, r3] - movs r3, 0xBE - lsls r3, 1 - adds r2, r3 - ldr r2, [r2] - lsls r1, 5 - adds r1, r2 - movs r2, 0x20 - bl memcpy - adds r0, r5, 0 - bl DestroyAnimVisualTask - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117D3C - - thumb_func_start sub_8117DD8 -sub_8117DD8: @ 8117DD8 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08117E1C - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80A75AC - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08117E34 - movs r2, 0x1 -_08117E0A: - lsrs r1, 1 - adds r4, 0x1 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _08117E0A - b _08117E34 - .pool -_08117E1C: - cmp r0, 0x1 - bne _08117E28 - ldr r0, =gBattleAnimAttacker - b _08117E2E - .pool -_08117E28: - cmp r0, 0x2 - bne _08117E34 - ldr r0, =gBattleAnimTarget -_08117E2E: - ldrb r0, [r0] - adds r4, r0, 0 - adds r4, 0x10 -_08117E34: - lsls r1, r4, 5 - ldr r0, =gPlttBufferUnfaded - adds r0, r1, r0 - ldr r2, =gPlttBufferFaded - adds r1, r2 - movs r2, 0x20 - bl memcpy - adds r0, r5, 0 - bl DestroyAnimVisualTask - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117DD8 - - thumb_func_start AnimTask_IsContest -AnimTask_IsContest: @ 8117E60 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsContest - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08117E80 - ldr r1, =gBattleAnimArgs - movs r0, 0x1 - strh r0, [r1, 0xE] - b _08117E84 - .pool -_08117E80: - ldr r0, =gBattleAnimArgs - strh r1, [r0, 0xE] -_08117E84: - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end AnimTask_IsContest - - thumb_func_start sub_8117E94 -sub_8117E94: @ 8117E94 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gBattleAnimAttacker - ldr r1, =gBattlerTarget - ldrb r1, [r1] - strb r1, [r2] - ldr r2, =gBattleAnimTarget - ldr r1, =gEffectBattler - ldrb r1, [r1] - strb r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117E94 - - thumb_func_start AnimTask_IsTargetSameSide -AnimTask_IsTargetSameSide: @ 8117EC4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - adds r4, r0, 0 - ldr r0, =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _08117EF8 - ldr r1, =gBattleAnimArgs - movs r0, 0x1 - b _08117EFC - .pool -_08117EF8: - ldr r1, =gBattleAnimArgs - movs r0, 0 -_08117EFC: - strh r0, [r1, 0xE] - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end AnimTask_IsTargetSameSide - - thumb_func_start sub_8117F10 -sub_8117F10: @ 8117F10 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gBattleAnimTarget - ldr r1, =gBattlerTarget - ldrb r1, [r1] - strb r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117F10 - - thumb_func_start sub_8117F30 -sub_8117F30: @ 8117F30 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gBattleAnimAttacker - ldr r1, =gBattlerAttacker - ldrb r1, [r1] - strb r1, [r2] - ldr r2, =gBattleAnimTarget - ldr r1, =gEffectBattler - ldrb r1, [r1] - strb r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117F30 - - thumb_func_start sub_8117F60 -sub_8117F60: @ 8117F60 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _08117F78 - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _08117FB4 -_08117F78: - ldr r0, =gTasks - lsls r3, r4, 2 - adds r3, r4 - lsls r3, 3 - adds r3, r0 - ldr r0, =gBattleSpritesDataPtr - ldr r4, [r0] - ldr r2, =gBattleAnimAttacker - ldrb r0, [r2] - ldr r1, [r4] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - lsls r0, 31 - lsrs r0, 31 - strh r0, [r3, 0x8] - ldrb r1, [r2] - ldr r0, [r4] - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x1 - orrs r0, r2 - strb r0, [r1] - ldr r0, =sub_8117FD0 - str r0, [r3] - ldr r1, =gAnimVisualTaskCount - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_08117FB4: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117F60 - - thumb_func_start sub_8117FD0 -sub_8117FD0: @ 8117FD0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, =gBattleAnimArgs - movs r2, 0xE - ldrsh r1, [r0, r2] - movs r0, 0x80 - lsls r0, 5 - cmp r1, r0 - bne _08118014 - ldr r0, =gBattleSpritesDataPtr - ldr r1, [r0] - ldr r0, =gBattleAnimAttacker - ldrb r3, [r0] - ldr r0, [r1] - lsls r3, 2 - adds r3, r0 - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x8] - movs r1, 0x1 - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - adds r0, r4, 0 - bl DestroyTask -_08118014: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8117FD0 - - .align 2, 0 diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index f0afce456..ca338ac9b 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -2921,7 +2921,7 @@ SkyAttackEnd: SkyAttackSetUp: monbg ANIM_DEF_PARTNER setalpha 12, 11 - createvisualtask AnimTask_IsTargetPartner, 5, ARG_RET_ID + createvisualtask AnimTask_GetTargetIsAttackerPartner, 5, ARG_RET_ID jumpretfalse SkyAttackSetUpAgainstOpponent goto SkyAttackSetUpAgainstPartner SkyAttackSetUpAgainstOpponent: @@ -3125,7 +3125,7 @@ Move_MACH_PUNCH: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_IsAttackerOpponentSide, 2 + createvisualtask AnimTask_GetAttackerSide, 2 jumprettrue MachPunchAgainstPlayer fadetobg BG_HIGHSPEED_OPPONENT MachPunchContinue: @@ -3385,7 +3385,7 @@ Move_MOONLIGHT: Move_EXTREME_SPEED: loadspritegfx ANIM_TAG_SPEED_DUST loadspritegfx ANIM_TAG_IMPACT - createvisualtask AnimTask_IsAttackerOpponentSide, 2 + createvisualtask AnimTask_GetAttackerSide, 2 jumprettrue ExtremeSpeedAgainstPlayer fadetobg BG_HIGHSPEED_OPPONENT ExtremeSpeedContinue: @@ -3871,13 +3871,13 @@ Move_CAMOUFLAGE: monbg ANIM_ATK_PARTNER monbgprio_28 ANIM_ATTACKER setalpha 16, 0 - createvisualtask sub_811675C, 5, 2, 3, 0, 14 + createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 3, 0, 14 delay 16 createvisualtask sub_81136E8, 2, 4 playsewithpan SE_W185, SOUND_PAN_ATTACKER waitforvisualfinish delay 8 - createvisualtask sub_811675C, 5, 2, 0, 0, 0 + createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 0, 0, 0 waitforvisualfinish createvisualtask sub_81137E4, 2, 1 waitforvisualfinish @@ -5518,7 +5518,7 @@ SolarBeamUnleash1: Move_BLIZZARD: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_IsAttackerOpponentSide, 2 + createvisualtask AnimTask_GetAttackerSide, 2 jumprettrue BlizzardAgainstPlayer fadetobg BG_HIGHSPEED_OPPONENT BlizzardContinue: @@ -9158,7 +9158,7 @@ Move_SILVER_WIND: monbgprio_29 delay 0 createvisualtask sub_8116664, 10, 1, 0, 0, 4, RGB_BLACK - createvisualtask AnimTask_IsTargetOpponentSide, 2 + createvisualtask AnimTask_GetTargetSide, 2 jumprettrue SilverWindOnPlayer fadetobg BG_BUG_OPPONENT waitbgfadeout diff --git a/include/battle.h b/include/battle.h index 90bef24ac..70b1856a8 100644 --- a/include/battle.h +++ b/include/battle.h @@ -660,7 +660,7 @@ struct MonSpritesGfx u8 field_F4[0x80]; u8 *barFontGfx; void *field_178; - void *field_17C; + u16 *field_17C; }; // All battle variables are declared in battle_main.c @@ -769,4 +769,17 @@ extern u8 gMultiUsePlayerCursor; extern u8 gNumberOfMovesToChoose; extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT]; +extern u16 gBattle_WIN0H; +extern u16 gBattle_WIN0V; +extern u16 gBattle_WIN1H; +extern u16 gBattle_WIN1V; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; + #endif // GUARD_BATTLE_H diff --git a/include/battle_anim.h b/include/battle_anim.h index 653be10b8..e164cef7a 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -9,7 +9,7 @@ enum BG_ANIM_SCREEN_SIZE, BG_ANIM_AREA_OVERFLOW_MODE, BG_ANIM2, - BG_ANIM3, + BG_ANIM_CHAR_BASE_BLOCK, BG_ANIM_PRIORITY, BG_ANIM_5, BG_ANIM_6 @@ -64,6 +64,7 @@ s8 BattleAnimAdjustPanning2(s8 pan); s16 KeepPanInRange(s16 a); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); void sub_80A4720(u16 a, u16 *b, u32 c, u8 d); +void sub_80A477C(bool8); // battle_anim_80FE840.s void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); @@ -87,6 +88,15 @@ void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation); void sub_80A6E14(struct Sprite *sprite); void sub_80A7270(u8 spriteId, u8 objMode); void sub_80A73A0(u8 spriteId); +u32 sub_80A75AC(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7); +u32 sub_80A76C4(u8 a1, u8 a2, u8 a3, u8 a4); +u8 sub_80A77AC(u8 a1); +s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8); +void obj_delete_but_dont_free_vram(struct Sprite*); +u8 sub_80A89C8(int, u8, int); +void sub_80A6D60(struct UnknownAnimStruct2*, const void*, u32); +void sub_80A6CC0(u32, const void*, u32); +void sub_80A6DAC(bool8); enum { @@ -127,6 +137,11 @@ u8 ItemIdToBallId(u16 itemId); u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId); u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId); +// battle_anim_utility_funcs.s +void sub_8116EB4(u8); + +u32 sub_811583C(s16); + u8 GetBattlerSpriteFinal_Y(u8, u16, u8); extern const struct OamData gUnknown_08524944; diff --git a/include/contest.h b/include/contest.h index d62d33ab7..502d44b90 100644 --- a/include/contest.h +++ b/include/contest.h @@ -239,7 +239,7 @@ struct Shared18000 struct ContestStruct_field_18 { - u16 unk0; + u16 species; u16 unk2; u8 unk4_0:1; u8 unk5; diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 03faa1a87..c20b69886 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -565,12 +565,14 @@ #define WINOUT_WIN01_BG1 (1 << 1) #define WINOUT_WIN01_BG2 (1 << 2) #define WINOUT_WIN01_BG3 (1 << 3) +#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3) #define WINOUT_WIN01_OBJ (1 << 4) #define WINOUT_WIN01_CLR (1 << 5) #define WINOUT_WINOBJ_BG0 (1 << 8) #define WINOUT_WINOBJ_BG1 (1 << 9) #define WINOUT_WINOBJ_BG2 (1 << 10) #define WINOUT_WINOBJ_BG3 (1 << 11) +#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3) #define WINOUT_WINOBJ_OBJ (1 << 12) #define WINOUT_WINOBJ_CLR (1 << 13) diff --git a/include/graphics.h b/include/graphics.h index a2c86a67d..a3af44ad7 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4697,6 +4697,20 @@ extern const u32 gBattleAnimBackgroundTilemap_17[]; extern const u32 gBattleAnimBackgroundTilemap_20[]; extern const u32 gBattleAnimBackgroundTilemap_21[]; +extern const u32 gUnknown_08C20668[]; +extern const u32 gUnknown_08C20684[]; +extern const u32 gBattleStatMask_Gfx[]; +extern const u32 gBattleStatMask1_Tilemap[]; +extern const u32 gBattleStatMask2_Tilemap[]; +extern const u32 gBattleStatMask1_Pal[]; +extern const u32 gBattleStatMask2_Pal[]; +extern const u32 gBattleStatMask3_Pal[]; +extern const u32 gBattleStatMask4_Pal[]; +extern const u32 gBattleStatMask5_Pal[]; +extern const u32 gBattleStatMask6_Pal[]; +extern const u32 gBattleStatMask7_Pal[]; +extern const u32 gBattleStatMask8_Pal[]; + extern const u32 gUnknown_08D9A88C[]; extern const u32 gContestMiscGfx[]; extern const u32 gContestAudienceGfx[]; diff --git a/ld_script.txt b/ld_script.txt index ea6ef5bcd..33083a21a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -173,7 +173,7 @@ SECTIONS { asm/dark.o(.text); asm/ground.o(.text); asm/normal.o(.text); - asm/battle_anim_utility_funcs.o(.text); + src/battle_anim_utility_funcs.o(.text); asm/battle_intro.o(.text); src/bike.o(.text); src/easy_chat.o(.text); diff --git a/src/battle_anim.c b/src/battle_anim.c index 5c34d6a43..e8720fcfb 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -20,14 +20,6 @@ #define ANIM_SPRITE_INDEX_COUNT 8 -extern u16 gBattle_WIN0H; -extern u16 gBattle_WIN0V; -extern u16 gBattle_WIN1H; -extern u16 gBattle_WIN1V; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct MusicPlayerInfo gMPlayInfo_SE1; extern struct MusicPlayerInfo gMPlayInfo_SE2; @@ -1502,7 +1494,7 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo else { for (i = 0; i < 4; i++) - gAnimBattlerSpecies[i] = gContestResources->field_18->unk0; + gAnimBattlerSpecies[i] = gContestResources->field_18->species; } if (!isMoveAnim) @@ -1959,7 +1951,7 @@ void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) battlerSpriteId = gBattlerSpriteIds[battlerId]; gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20; - if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->unk0)) + if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->species)) gBattle_BG1_X--; gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20; @@ -2017,7 +2009,7 @@ static void sub_80A46A0(void) struct UnknownAnimStruct2 unknownStruct; u16 *ptr; - if (IsSpeciesNotUnown(gContestResources->field_18->unk0)) + if (IsSpeciesNotUnown(gContestResources->field_18->species)) { sub_80A6B30(&unknownStruct); ptr = unknownStruct.unk4; diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c index d213e4831..d8e422bb5 100644 --- a/src/battle_anim_80A5C6C.c +++ b/src/battle_anim_80A5C6C.c @@ -159,7 +159,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId) if (shared19348.unk4_0) species = shared19348.unk2; else - species = shared19348.unk0; + species = shared19348.species; } else { @@ -324,7 +324,7 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId) if (shared19348.unk4_0) species = shared19348.unk2; else - species = shared19348.unk0; + species = shared19348.species; } else { @@ -940,18 +940,18 @@ void sub_80A6BFC(struct UnknownAnimStruct2 *unk) } } -void sub_80A6C68(u32 arg0) +void sub_80A6C68(u32 bgId) { struct UnknownAnimStruct2 unkStruct; - sub_80A6B90(&unkStruct, arg0); + sub_80A6B90(&unkStruct, bgId); CpuFill32(0, unkStruct.bgTiles, 0x2000); LoadBgTiles(unkStruct.bgId, unkStruct.bgTiles, 0x2000, unkStruct.tilesOffset); FillBgTilemapBufferRect(unkStruct.bgId, 0, 0, 0, 0x20, 0x40, 0x11); CopyBgTilemapBufferToVram(unkStruct.bgId); } -void sub_80A6CC0(u32 bgId, void *src, u32 tilesOffset) +void sub_80A6CC0(u32 bgId, const void *src, u32 tilesOffset) { CpuFill32(0, gUnknown_0202305C, 0x2000); LZDecompressWram(src, gUnknown_0202305C); @@ -1854,7 +1854,7 @@ u16 sub_80A7F18(u8 spriteId) { if (IsContest()) { - species = shared19348.unk0; + species = shared19348.species; return gMonBackPicCoords[species].y_offset; } else @@ -2112,7 +2112,7 @@ s16 sub_80A861C(u8 battlerId, u8 a2) } else { - species = shared19348.unk0; + species = shared19348.species; personality = shared19348.unk8; } if (species == SPECIES_UNOWN) diff --git a/src/battle_anim_80A9C70.c b/src/battle_anim_80A9C70.c index 5401247b8..f1245a032 100644 --- a/src/battle_anim_80A9C70.c +++ b/src/battle_anim_80A9C70.c @@ -17,8 +17,6 @@ extern const u8 *const gBattleAnims_StatusConditions[]; extern const struct OamData gUnknown_08524904; extern const struct OamData gUnknown_08524A3C; -extern void sub_8116EB4(u8 taskId); - // This file's functions. static void sub_80A9DB4(u8 taskId); static void sub_80A9FD0(u8 taskId); diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index b49a6d03f..07fb604b8 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -131,7 +131,7 @@ void sub_8158D8C(u8 taskId) if (IsContest()) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) - species = gContestResources->field_18->unk0; + species = gContestResources->field_18->species; else DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task. } @@ -177,7 +177,7 @@ void sub_8158E9C(u8 taskId) if (IsContest()) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) - species = gContestResources->field_18->unk0; + species = gContestResources->field_18->species; else DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task. } @@ -281,7 +281,7 @@ void sub_81590B8(u8 taskId) pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); if (IsContest()) - species = gContestResources->field_18->unk0; + species = gContestResources->field_18->species; else species = gAnimBattlerSpecies[gBattleAnimAttacker]; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index d9c574e73..11cf46ab5 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -1,6 +1,42 @@ #include "global.h" #include "battle_anim.h" +#include "contest.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "malloc.h" +#include "palette.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "util.h" #include "constants/rgb.h" +#include "constants/songs.h" + +struct AnimStatsChangeData +{ + u8 battler1; + u8 battler2; + u8 higherPriority; + s16 data[8]; + u16 species; +}; + +static EWRAM_DATA struct AnimStatsChangeData *sAnimStatsChangeData = {0}; + +static void StartBlendAnimSpriteColor(u8, u32); +static void AnimTask_BlendSpriteColor_Step2(u8); +static void sub_81169A0(u8); +static void sub_81169F8(u8); +static void sub_8116AD0(struct Sprite*); +static void sub_8116D64(u8); +static void sub_8116F04(u8); +static void sub_81170EC(u8); +static void sub_81172EC(u8); +static void sub_8117500(u8); +static void sub_81175C4(u32, u16); +static void sub_81176D8(u8); +static void sub_8117A60(u8); +static void sub_8117FD0(u8); const u16 gUnknown_08597418 = RGB(31, 31, 31); @@ -8,3 +44,1017 @@ const u16 gUnknown_08597418 = RGB(31, 31, 31); // possibly some register offsets const u8 gUnknown_0859741A[] = {0x08, 0x0a, 0x0c, 0x0e}; const u8 gUnknown_0859741E[] = {0x08, 0x0a, 0x0c, 0x0e}; + +void sub_8116620(u8 taskId) +{ + u32 selectedPalettes = sub_811583C(gBattleAnimArgs[0]); + selectedPalettes |= sub_80A76C4((gBattleAnimArgs[0] >> 7) & 1, + (gBattleAnimArgs[0] >> 8) & 1, + (gBattleAnimArgs[0] >> 9) & 1, + (gBattleAnimArgs[0] >> 10) & 1); + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void sub_8116664(u8 taskId) +{ + u8 battler; + u32 selectedPalettes; + u8 animBattlers[2]; + + animBattlers[1] = 0xFF; + selectedPalettes = sub_811583C(1); + switch (gBattleAnimArgs[0]) + { + case 2: + selectedPalettes = 0; + // fall through + case 0: + animBattlers[0] = gBattleAnimAttacker; + break; + case 3: + selectedPalettes = 0; + // fall through + case 1: + animBattlers[0] = gBattleAnimTarget; + break; + case 4: + animBattlers[0] = gBattleAnimAttacker; + animBattlers[1] = gBattleAnimTarget; + break; + case 5: + animBattlers[0] = 0xFF; + break; + case 6: + selectedPalettes = 0; + animBattlers[0] = BATTLE_PARTNER(gBattleAnimAttacker); + break; + case 7: + selectedPalettes = 0; + animBattlers[0] = BATTLE_PARTNER(gBattleAnimTarget); + break; + } + + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (battler != animBattlers[0] && battler != animBattlers[1] && IsBattlerSpriteVisible(battler)) + selectedPalettes |= 0x10000 << sub_80A77AC(battler); + } + + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void AnimTask_SetCamouflageBlend(u8 taskId) +{ + u32 selectedPalettes = sub_811583C(gBattleAnimArgs[0]); + switch (gBattleTerrain) + { + case BATTLE_TERRAIN_GRASS: + gBattleAnimArgs[4] = RGB(12, 24, 2); + break; + case BATTLE_TERRAIN_LONG_GRASS: + gBattleAnimArgs[4] = RGB(0, 15, 2); + break; + case BATTLE_TERRAIN_SAND: + gBattleAnimArgs[4] = RGB(30, 24, 11); + break; + case BATTLE_TERRAIN_UNDERWATER: + gBattleAnimArgs[4] = RGB(0, 0, 18); + break; + case BATTLE_TERRAIN_WATER: + gBattleAnimArgs[4] = RGB(11, 22, 31); + break; + case BATTLE_TERRAIN_POND: + gBattleAnimArgs[4] = RGB(11, 22, 31); + break; + case BATTLE_TERRAIN_MOUNTAIN: + gBattleAnimArgs[4] = RGB(22, 16, 10); + break; + case BATTLE_TERRAIN_CAVE: + gBattleAnimArgs[4] = RGB(14, 9, 3); + break; + case BATTLE_TERRAIN_BUILDING: + gBattleAnimArgs[4] = RGB(31, 31, 31); + break; + case BATTLE_TERRAIN_PLAIN: + gBattleAnimArgs[4] = RGB(31, 31, 31); + break; + } + + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void AnimTask_BlendParticle(u8 taskId) +{ + u8 paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + u32 selectedPalettes = 1 << (paletteIndex + 16); + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes) +{ + gTasks[taskId].data[0] = selectedPalettes; + gTasks[taskId].data[1] = selectedPalettes >> 16; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[4] = gBattleAnimArgs[3]; + gTasks[taskId].data[5] = gBattleAnimArgs[4]; + gTasks[taskId].data[10] = gBattleAnimArgs[2]; + gTasks[taskId].func = AnimTask_BlendSpriteColor_Step2; + gTasks[taskId].func(taskId); +} + +static void AnimTask_BlendSpriteColor_Step2(u8 taskId) +{ + u32 selectedPalettes; + u16 singlePaletteMask = 0; + + if (gTasks[taskId].data[9] == gTasks[taskId].data[2]) + { + gTasks[taskId].data[9] = 0; + selectedPalettes = gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16); + while (selectedPalettes != 0) + { + if (selectedPalettes & 1) + BlendPalette(singlePaletteMask, 16, gTasks[taskId].data[10], gTasks[taskId].data[5]); + singlePaletteMask += 0x10; + selectedPalettes >>= 1; + } + + if (gTasks[taskId].data[10] < gTasks[taskId].data[4]) + gTasks[taskId].data[10]++; + else if (gTasks[taskId].data[10] > gTasks[taskId].data[4]) + gTasks[taskId].data[10]--; + else + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[9]++; + } +} + +void sub_8116960(u8 taskId) +{ + BeginHardwarePaletteFade( + gBattleAnimArgs[0], + gBattleAnimArgs[1], + gBattleAnimArgs[2], + gBattleAnimArgs[3], + gBattleAnimArgs[4]); + + gTasks[taskId].func = sub_81169A0; +} + +static void sub_81169A0(u8 taskId) +{ + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); +} + +void sub_81169C0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = gBattleAnimArgs[0]; + task->data[1] = 0; + task->data[2] = gBattleAnimArgs[1]; + task->data[3] = gBattleAnimArgs[2]; + task->data[4] = gBattleAnimArgs[3]; + task->data[5] = 0; + task->func = sub_81169F8; +} + +static void sub_81169F8(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (task->data[4]) + { + if (task->data[1]) + { + task->data[1]--; + } + else + { + task->data[6] = duplicate_obj_of_side_rel2move_in_transparent_mode(task->data[0]); + if (task->data[6] >= 0) + { + gSprites[task->data[6]].oam.priority = task->data[0] ? 1 : 2; + gSprites[task->data[6]].data[0] = task->data[3]; + gSprites[task->data[6]].data[1] = taskId; + gSprites[task->data[6]].data[2] = 5; + gSprites[task->data[6]].callback = sub_8116AD0; + task->data[5]++; + } + + task->data[4]--; + task->data[1] = task->data[2]; + } + } + else if (task->data[5] == 0) + { + DestroyAnimVisualTask(taskId); + } +} + +static void sub_8116AD0(struct Sprite *sprite) +{ + if (sprite->data[0]) + { + sprite->data[0]--; + } + else + { + gTasks[sprite->data[1]].data[sprite->data[2]]--; + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_8116B14(u8 taskId) +{ + u16 species; + int spriteId, newSpriteId; + u16 var0; + u16 bg1Cnt; + struct UnknownAnimStruct2 unknownStruct; + + var0 = 0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12)); + bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((struct BgCnt *)&bg1Cnt)->priority = 0; + ((struct BgCnt *)&bg1Cnt)->screenSize = 0; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + + if (!IsContest()) + { + ((struct BgCnt *)&bg1Cnt)->charBaseBlock = 1; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + } + + if (IsDoubleBattle() && !IsContest()) + { + if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_RIGHT + || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT) + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)) == TRUE) + { + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority -= 1; + ((struct BgCnt *)&bg1Cnt)->priority = 1; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + var0 = 1; + } + } + } + + if (IsContest()) + { + species = gContestResources->field_18->species; + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + } + + spriteId = GetAnimBattlerSpriteId(0); + newSpriteId = sub_80A89C8(gBattleAnimAttacker, spriteId, species); + sub_80A6B30(&unknownStruct); + sub_80A6D60(&unknownStruct, gUnknown_08C20684, 0); + sub_80A6CC0(unknownStruct.bgId, gUnknown_08C20668, unknownStruct.tilesOffset); + LoadPalette(&gUnknown_08597418, unknownStruct.unk8 * 16 + 1, 2); + + gBattle_BG1_X = -gSprites[spriteId].pos1.x + 32; + gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32; + gTasks[taskId].data[0] = newSpriteId; + gTasks[taskId].data[6] = var0; + gTasks[taskId].func = sub_8116D64; +} + +static void sub_8116D64(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + struct Sprite *sprite; + u16 bg1Cnt; + + gTasks[taskId].data[10] += 4; + gBattle_BG1_Y -= 4; + if (gTasks[taskId].data[10] == 64) + { + gTasks[taskId].data[10] = 0; + gBattle_BG1_Y += 64; + if (++gTasks[taskId].data[11] == 4) + { + sub_80A477C(0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + if (!IsContest()) + { + bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((struct BgCnt *)&bg1Cnt)->charBaseBlock = 0; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + } + + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + sprite = &gSprites[GetAnimBattlerSpriteId(0)]; // unused + sprite = &gSprites[gTasks[taskId].data[0]]; + DestroySprite(sprite); + + sub_80A6B30(&unknownStruct); + sub_80A6C68(unknownStruct.bgId); + if (gTasks[taskId].data[6] == 1) + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority++; + + gBattle_BG1_Y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_8116EB4(u8 taskId) +{ + u8 i; + + sAnimStatsChangeData = AllocZeroed(sizeof(struct AnimStatsChangeData)); + for (i = 0; i < 8; i++) + sAnimStatsChangeData->data[i] = gBattleAnimArgs[i]; + + gTasks[taskId].func = sub_8116F04; +} + +static void sub_8116F04(u8 taskId) +{ + if (sAnimStatsChangeData->data[2] == 0) + sAnimStatsChangeData->battler1 = gBattleAnimAttacker; + else + sAnimStatsChangeData->battler1 = gBattleAnimTarget; + + sAnimStatsChangeData->battler2 = BATTLE_PARTNER(sAnimStatsChangeData->battler1); + if (IsContest() || (sAnimStatsChangeData->data[3] && !IsBattlerSpriteVisible(sAnimStatsChangeData->battler2))) + sAnimStatsChangeData->data[3] = 0; + + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + + if (IsDoubleBattle() && sAnimStatsChangeData->data[3] == 0) + { + if (GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_OPPONENT_RIGHT + || GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_PLAYER_LEFT) + { + if (IsBattlerSpriteVisible(sAnimStatsChangeData->battler2) == TRUE) + { + gSprites[gBattlerSpriteIds[sAnimStatsChangeData->battler2]].oam.priority -= 1; + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + sAnimStatsChangeData->higherPriority = 1; + } + } + } + + if (IsContest()) + { + sAnimStatsChangeData->species = gContestResources->field_18->species; + } + else + { + if (GetBattlerSide(sAnimStatsChangeData->battler1) != B_SIDE_PLAYER) + sAnimStatsChangeData->species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES); + else + sAnimStatsChangeData->species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES); + } + + gTasks[taskId].func = sub_81170EC; +} + +static void sub_81170EC(u8 taskId) +{ + struct UnknownAnimStruct2 unknownStruct; + u8 spriteId, spriteId2; + u8 battlerSpriteId; + + spriteId2 = 0; + battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1]; + spriteId = sub_80A89C8(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species); + if (sAnimStatsChangeData->data[3]) + { + battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; + spriteId2 = sub_80A89C8(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species); + } + + sub_80A6B30(&unknownStruct); + if (sAnimStatsChangeData->data[0] == 0) + sub_80A6D60(&unknownStruct, gBattleStatMask1_Tilemap, 0); + else + sub_80A6D60(&unknownStruct, gBattleStatMask2_Tilemap, 0); + + sub_80A6CC0(unknownStruct.bgId, gBattleStatMask_Gfx, unknownStruct.tilesOffset); + switch (sAnimStatsChangeData->data[1]) + { + case 0: + LoadCompressedPalette(gBattleStatMask2_Pal, unknownStruct.unk8 << 4, 32); + break; + case 1: + LoadCompressedPalette(gBattleStatMask1_Pal, unknownStruct.unk8 << 4, 32); + break; + case 2: + LoadCompressedPalette(gBattleStatMask3_Pal, unknownStruct.unk8 << 4, 32); + break; + case 3: + LoadCompressedPalette(gBattleStatMask4_Pal, unknownStruct.unk8 << 4, 32); + break; + case 4: + LoadCompressedPalette(gBattleStatMask6_Pal, unknownStruct.unk8 << 4, 32); + break; + case 5: + LoadCompressedPalette(gBattleStatMask7_Pal, unknownStruct.unk8 << 4, 32); + break; + case 6: + LoadCompressedPalette(gBattleStatMask8_Pal, unknownStruct.unk8 << 4, 32); + break; + default: + LoadCompressedPalette(gBattleStatMask5_Pal, unknownStruct.unk8 << 4, 32); + break; + } + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + + if (sAnimStatsChangeData->data[0] == 1) + { + gBattle_BG1_X = 64; + gTasks[taskId].data[1] = -3; + } + else + { + gTasks[taskId].data[1] = 3; + } + + if (sAnimStatsChangeData->data[4] == 0) + { + gTasks[taskId].data[4] = 10; + gTasks[taskId].data[5] = 20; + } + else + { + gTasks[taskId].data[4] = 13; + gTasks[taskId].data[5] = 30; + } + + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[2] = sAnimStatsChangeData->data[3]; + gTasks[taskId].data[3] = spriteId2; + gTasks[taskId].data[6] = sAnimStatsChangeData->higherPriority; + gTasks[taskId].data[7] = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; + gTasks[taskId].func = sub_81172EC; + + if (sAnimStatsChangeData->data[0] == 0) + PlaySE12WithPanning(SE_W287, BattleAnimAdjustPanning2(-64)); + else + PlaySE12WithPanning(SE_W287B, BattleAnimAdjustPanning2(-64)); +} + +static void sub_81172EC(u8 taskId) +{ + gBattle_BG1_Y += gTasks[taskId].data[1]; + + switch (gTasks[taskId].data[15]) + { + case 0: + if (gTasks[taskId].data[11]++ > 0) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == gTasks[taskId].data[4]) + gTasks[taskId].data[15]++; + } + break; + case 1: + if (++gTasks[taskId].data[10] == gTasks[taskId].data[5]) + gTasks[taskId].data[15]++; + break; + case 2: + if (gTasks[taskId].data[11]++ > 0) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == 0) + { + sub_80A477C(0); + gTasks[taskId].data[15]++;; + } + } + break; + case 3: + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + if (gTasks[taskId].data[2]) + DestroySprite(&gSprites[gTasks[taskId].data[3]]); + + if (gTasks[taskId].data[6] == 1) + gSprites[gTasks[taskId].data[7]].oam.priority++; + + Free(sAnimStatsChangeData); + sAnimStatsChangeData = NULL; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_8117494(u8 taskId) +{ + u32 selectedPalettes = sub_80A76C4(1, 1, 1, 1); + sub_81175C4(selectedPalettes, 0); + gTasks[taskId].data[14] = selectedPalettes >> 16; + + selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + sub_81175C4(selectedPalettes, 0xFFFF); + gTasks[taskId].data[15] = selectedPalettes; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].func = sub_8117500; +} + +static void sub_8117500(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 6) + { + task->data[1] = 0; + task->data[2] = 16; + task->data[0]++; + } + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + task->data[2]--; + + for (i = 0; i < 16; i++) + { + if ((task->data[15] >> i) & 1) + { + u16 paletteOffset = i * 16; + BlendPalette(paletteOffset, 16, task->data[2], 0xFFFF); + } + + if ((task->data[14] >> i) & 1) + { + u16 paletteOffset = i * 16 + 0x100; + BlendPalette(paletteOffset, 16, task->data[2], 0); + } + } + + if (task->data[2] == 0) + task->data[0]++; + } + break; + case 2: + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_81175C4(u32 selectedPalettes, u16 color) +{ + u16 i; + + for (i = 0; i < 32; i++) + { + if (selectedPalettes & 1) + { + u16 curOffset = i * 16; + u16 paletteOffset = curOffset; + while (curOffset < paletteOffset + 16) + { + gPlttBufferFaded[curOffset] = color; + curOffset++; + } + } + + selectedPalettes >>= 1; + } +} + +void sub_8117610(u8 taskId) +{ + u32 battler; + int j; + u32 selectedPalettes = 0; + + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (gBattleAnimAttacker != battler) + selectedPalettes |= 1 << (battler + 16); + } + + for (j = 5; j != 0; j--) + gBattleAnimArgs[j] = gBattleAnimArgs[j - 1]; + + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void sub_8117660(u8 taskId) +{ + u8 newTaskId; + + sub_80A6DAC(0); + newTaskId = CreateTask(sub_81176D8, 5); + if (gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + + gTasks[newTaskId].data[1] = gBattleAnimArgs[0]; + gTasks[newTaskId].data[2] = gBattleAnimArgs[1]; + gTasks[newTaskId].data[3] = gBattleAnimArgs[3]; + gTasks[newTaskId].data[0]++; + DestroyAnimVisualTask(taskId); +} + +static void sub_81176D8(u8 taskId) +{ + gTasks[taskId].data[10] += gTasks[taskId].data[1]; + gTasks[taskId].data[11] += gTasks[taskId].data[2]; + gBattle_BG3_X += gTasks[taskId].data[10] >> 8; + gBattle_BG3_Y += gTasks[taskId].data[11] >> 8; + gTasks[taskId].data[10] &= 0xFF; + gTasks[taskId].data[11] &= 0xFF; + + if (gBattleAnimArgs[7] == gTasks[taskId].data[3]) + { + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + sub_80A6DAC(1); + DestroyTask(taskId); + } +} + +void AnimTask_GetAttackerSide(u8 taskId) +{ + gBattleAnimArgs[7] = GetBattlerSide(gBattleAnimAttacker); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetTargetSide(u8 taskId) +{ + gBattleAnimArgs[7] = GetBattlerSide(gBattleAnimTarget); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetTargetIsAttackerPartner(u8 taskId) +{ + gBattleAnimArgs[7] = BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget; + DestroyAnimVisualTask(taskId); +} + +void sub_81177E4(u8 taskId) +{ + u16 battler; + + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (battler != gBattleAnimAttacker && IsBattlerSpriteVisible(battler)) + gSprites[gBattlerSpriteIds[battler]].invisible = gBattleAnimArgs[0]; + } + + DestroyAnimVisualTask(taskId); +} + +void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u8 *arg8, const u8 *arg9, const u16 *palette) +{ + u16 species; + u8 spriteId, spriteId2; + u16 bg1Cnt; + struct UnknownAnimStruct2 unknownStruct; + u8 battler2; + + spriteId2 = 0; + battler2 = BATTLE_PARTNER(battler1); + + if (IsContest() || (arg4 && !IsBattlerSpriteVisible(battler2))) + arg4 = 0; + + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((vBgCnt *)&bg1Cnt)->priority = 0; + ((vBgCnt *)&bg1Cnt)->screenSize = 0; + ((vBgCnt *)&bg1Cnt)->areaOverflowMode = 1; + if (!IsContest()) + { + ((vBgCnt *)&bg1Cnt)->charBaseBlock = 1; + } + + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + + if (IsContest()) + { + species = gContestResources->field_18->species; + } + else + { + if (GetBattlerSide(battler1) != B_SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES); + } + + spriteId = sub_80A89C8(battler1, gBattlerSpriteIds[battler1], species); + if (arg4) + spriteId2 = sub_80A89C8(battler2, gBattlerSpriteIds[battler2], species); + + sub_80A6B30(&unknownStruct); + sub_80A6D60(&unknownStruct, arg9, 0); + sub_80A6CC0(unknownStruct.bgId, arg8, unknownStruct.tilesOffset); + LoadCompressedPalette(palette, unknownStruct.unk8 << 4, 32); + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gTasks[taskId].data[1] = arg2; + gTasks[taskId].data[4] = arg5; + gTasks[taskId].data[5] = arg7; + gTasks[taskId].data[6] = arg6; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[2] = arg4; + gTasks[taskId].data[3] = spriteId2; + gTasks[taskId].func = sub_8117A60; +} + +static void sub_8117A60(u8 taskId) +{ + gTasks[taskId].data[13] += gTasks[taskId].data[1] < 0 ? -gTasks[taskId].data[1] : gTasks[taskId].data[1]; + if (gTasks[taskId].data[1] < 0) + gBattle_BG1_Y -= gTasks[taskId].data[13] >> 8; + else + gBattle_BG1_Y += gTasks[taskId].data[13] >> 8; + + gTasks[taskId].data[13] &= 0xFF; + switch (gTasks[taskId].data[15]) + { + case 0: + if (gTasks[taskId].data[11]++ >= gTasks[taskId].data[6]) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == gTasks[taskId].data[4]) + gTasks[taskId].data[15]++; + } + break; + case 1: + if (++gTasks[taskId].data[10] == gTasks[taskId].data[5]) + gTasks[taskId].data[15]++; + break; + case 2: + if (gTasks[taskId].data[11]++ >= gTasks[taskId].data[6]) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == 0) + { + sub_80A477C(0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + if (!IsContest()) + { + u16 bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((vBgCnt *)&bg1Cnt)->charBaseBlock = 0; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + } + + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + if (gTasks[taskId].data[2]) + DestroySprite(&gSprites[gTasks[taskId].data[3]]); + + DestroyAnimVisualTask(taskId); + } + } + break; + } +} + +void AnimTask_GetBattleTerrain(u8 taskId) +{ + gBattleAnimArgs[0] = gBattleTerrain; + DestroyAnimVisualTask(taskId); +} + +void sub_8117C44(u8 taskId) +{ + gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + DestroyAnimVisualTask(taskId); +} + +void sub_8117C70(u8 taskId) +{ + Free(gMonSpritesGfxPtr->field_17C); + gMonSpritesGfxPtr->field_17C = NULL; + DestroyAnimVisualTask(taskId); +} + +void sub_8117CA0(u8 taskId) +{ + u32 selectedPalettes; + int paletteIndex = 0; + + if (gBattleAnimArgs[0] == 0) + { + selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0); + while ((selectedPalettes & 1) == 0) + { + selectedPalettes >>= 1; + paletteIndex++; + } + } + else if (gBattleAnimArgs[0] == 1) + { + paletteIndex = gBattleAnimAttacker + 16; + } + else if (gBattleAnimArgs[0] == 2) + { + paletteIndex = gBattleAnimTarget + 16; + } + + memcpy(&gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32); + DestroyAnimVisualTask(taskId); +} + +void sub_8117D3C(u8 taskId) +{ + u32 selectedPalettes; + int paletteIndex = 0; + + if (gBattleAnimArgs[0] == 0) + { + selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0); + while ((selectedPalettes & 1) == 0) + { + selectedPalettes >>= 1; + paletteIndex++; + } + } + else if (gBattleAnimArgs[0] == 1) + { + paletteIndex = gBattleAnimAttacker + 16; + } + else if (gBattleAnimArgs[0] == 2) + { + paletteIndex = gBattleAnimTarget + 16; + } + + memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], 32); + DestroyAnimVisualTask(taskId); +} + +void sub_8117DD8(u8 taskId) +{ + u32 selectedPalettes; + int paletteIndex = 0; + + if (gBattleAnimArgs[0] == 0) + { + selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0); + while ((selectedPalettes & 1) == 0) + { + selectedPalettes >>= 1; + paletteIndex++; + } + } + else if (gBattleAnimArgs[0] == 1) + { + paletteIndex = gBattleAnimAttacker + 16; + } + else if (gBattleAnimArgs[0] == 2) + { + paletteIndex = gBattleAnimTarget + 16; + } + + memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gPlttBufferFaded[paletteIndex * 16], 32); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_IsContest(u8 taskId) +{ + if (IsContest()) + gBattleAnimArgs[7] = 1; + else + gBattleAnimArgs[7] = 0; + + DestroyAnimVisualTask(taskId); +} + +void sub_8117E94(u8 taskId) +{ + gBattleAnimAttacker = gBattlerTarget; + gBattleAnimTarget = gEffectBattler; + DestroyAnimVisualTask(taskId); +} + +void AnimTask_IsTargetSameSide(u8 taskId) +{ + if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + gBattleAnimArgs[7] = 1; + else + gBattleAnimArgs[7] = 0; + + DestroyAnimVisualTask(taskId); +} + +void sub_8117F10(u8 taskId) +{ + gBattleAnimTarget = gBattlerTarget; + DestroyAnimVisualTask(taskId); +} + +void sub_8117F30(u8 taskId) +{ + gBattleAnimAttacker = gBattlerAttacker; + gBattleAnimTarget = gEffectBattler; + DestroyAnimVisualTask(taskId); +} + +void sub_8117F60(u8 taskId) +{ + if (IsContest()) + { + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[0] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible; + gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = 1; + gTasks[taskId].func = sub_8117FD0; + gAnimVisualTaskCount--; + } +} + +static void sub_8117FD0(u8 taskId) +{ + if (gBattleAnimArgs[7] == 0x1000) + { + gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = (u8)gTasks[taskId].data[0] & 1; + DestroyTask(taskId); + } +} diff --git a/src/battle_arena.c b/src/battle_arena.c index 4b47dcaf1..c686ed791 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -22,9 +22,6 @@ #include "constants/battle_frontier.h" #include "constants/moves.h" -extern u16 gBattle_WIN0H; -extern u16 gBattle_WIN0V; - extern const u32 gUnknown_08D854E8[]; extern const u16 gUnknown_08D855E8[]; diff --git a/src/battle_bg.c b/src/battle_bg.c index bbe50cc70..51138040c 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -31,11 +31,6 @@ struct BattleBackground const void *palette; }; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; - extern u8 GetCurrentMapBattleScene(void); // .rodata diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 0bf531c49..7589eb962 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -26,8 +26,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct UnusedControllerStruct gUnknown_02022D0C; diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index d84c1d296..04554a81b 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -26,8 +26,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 2daee71db..72dfb7e6b 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -33,8 +33,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct UnusedControllerStruct gUnknown_02022D0C; diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 28657901f..3fabf25f8 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -37,8 +37,6 @@ extern u8 gUnknown_0203CEE8; extern u8 gUnknown_0203CEE9; extern u8 gUnknown_0203CF00[]; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern struct UnusedControllerStruct gUnknown_02022D0C; extern struct MusicPlayerInfo gMPlayInfo_BGM; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 26eb16ed5..0790cbbff 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -26,8 +26,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 3de09bb81..83c4965ea 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -28,8 +28,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct UnusedControllerStruct gUnknown_02022D0C; extern u8 gUnknown_0203C7B4; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 108542269..cbb46a940 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -25,8 +25,6 @@ #include "constants/battle_anim.h" #include "constants/songs.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT]; extern u8 gUnknown_0203C7B4; extern struct MusicPlayerInfo gMPlayInfo_BGM; diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index a7ea04515..3f1542edb 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -23,9 +23,6 @@ #include "constants/battle_anim.h" #include "constants/songs.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; - extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern void sub_81358F4(void); diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index a82d45fc4..922c5d80b 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -31,8 +31,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; extern s32 gUnknown_0203CD70; extern struct UnusedControllerStruct gUnknown_02022D0C; diff --git a/src/battle_dome.c b/src/battle_dome.c index f0627e48d..c4cb24204 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -66,14 +66,6 @@ extern u16 GetFrontierBrainMonSpecies(u8); extern void ReducePlayerPartyToThree(void); extern u8 gUnknown_0203CEF8[]; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; extern const u16 gBattleFrontierHeldItems[]; extern const struct FacilityMon gBattleFrontierMons[]; diff --git a/src/battle_main.c b/src/battle_main.c index 97c0e26bb..4669e9123 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -69,18 +69,6 @@ struct UnknownPokemonStruct4 /*0x1D*/ u8 language; }; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; -extern u16 gBattle_WIN0H; -extern u16 gBattle_WIN0V; -extern u16 gBattle_WIN1H; -extern u16 gBattle_WIN1V; extern struct MusicPlayerInfo gMPlayInfo_SE1; extern struct MusicPlayerInfo gMPlayInfo_SE2; extern u8 gUnknown_0203CF00[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 07ab81a02..5bd7de072 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -47,11 +47,6 @@ #include "battle_pike.h" #include "battle_pyramid.h" -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern const u8* const gBattleScriptsForMoveEffects[]; diff --git a/src/battle_transition.c b/src/battle_transition.c index 759f15eee..94b9e78f9 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle.h" #include "battle_transition.h" #include "bg.h" #include "decompress.h" @@ -56,9 +57,6 @@ struct StructRectangularSpiral typedef bool8 (*TransitionStateFunc)(struct Task *task); typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite); -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; - extern const struct OamData gEventObjectBaseOam_32x32; extern void sub_80AC3D0(void); diff --git a/src/contest.c b/src/contest.c index 76e13781c..0c3a041b0 100644 --- a/src/contest.c +++ b/src/contest.c @@ -193,19 +193,6 @@ EWRAM_DATA struct ContestWinner gUnknown_02039F3C = {0}; u32 gContestRngValue; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern s16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; -extern u16 gBattle_WIN0H; -extern u16 gBattle_WIN0V; -extern u16 gBattle_WIN1H; -extern u16 gBattle_WIN1V; - extern const u16 gUnknown_08587C30[]; extern const struct BgTemplate gUnknown_08587F34[4]; extern const struct WindowTemplate gUnknown_08587F44[]; @@ -638,7 +625,8 @@ void sub_80D8108(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - if ((gBattle_BG1_Y += 7) <= 160) + (s16)gBattle_BG1_Y += 7; + if ((s16)gBattle_BG1_Y <= 160) break; gTasks[taskId].data[0]++; break; @@ -1915,9 +1903,9 @@ void sub_80DA6B4(u8 taskId) void sub_80DA700(u8 taskId) { gBattle_BG1_Y -= 7; - if (gBattle_BG1_Y < 0) + if ((s16)gBattle_BG1_Y < 0) gBattle_BG1_Y = 0; - if (*(u16 *)&gBattle_BG1_Y == 0) // Why cast? + if (gBattle_BG1_Y == 0) // Why cast? { gTasks[taskId].func = sub_80DA740; gTasks[taskId].data[0] = 0; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index c1d2ce59e..0d2072a15 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -41,15 +41,6 @@ struct EvoInfo static EWRAM_DATA struct EvoInfo *sEvoStructPtr = NULL; static EWRAM_DATA u16 *sEvoMovingBgPtr = NULL; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; - #define sEvoCursorPos gBattleCommunication[1] // when learning a new move #define sEvoGraphicsTaskID gBattleCommunication[2] diff --git a/src/graphics.c b/src/graphics.c index 005737035..7c28aa7b6 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -884,18 +884,18 @@ const u32 gBattleAnimSpritePalette_242[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpriteSheet_243[] = INCBIN_U32("graphics/battle_anims/sprites/243.4bpp.lz"); const u32 gBattleAnimSpritePalette_243[] = INCBIN_U32("graphics/battle_anims/sprites/243.gbapal.lz"); -const u32 gUnknown_08C2D720[] = INCBIN_U32("graphics/battle_anims/masks/stat.4bpp.lz"); -const u32 gUnknown_08C2D930[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_1.bin.lz"); -const u32 gUnknown_08C2DA4C[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_2.bin.lz"); +const u32 gBattleStatMask_Gfx[] = INCBIN_U32("graphics/battle_anims/masks/stat.4bpp.lz"); +const u32 gBattleStatMask1_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_1.bin.lz"); +const u32 gBattleStatMask2_Tilemap[] = INCBIN_U32("graphics/battle_anims/masks/stat_tilemap_2.bin.lz"); -const u32 gUnknown_08C2DB68[] = INCBIN_U32("graphics/battle_anims/masks/stat1.gbapal.lz"); -const u32 gUnknown_08C2DB88[] = INCBIN_U32("graphics/battle_anims/masks/stat2.gbapal.lz"); -const u32 gUnknown_08C2DBA8[] = INCBIN_U32("graphics/battle_anims/masks/stat3.gbapal.lz"); -const u32 gUnknown_08C2DBC8[] = INCBIN_U32("graphics/battle_anims/masks/stat4.gbapal.lz"); -const u32 gUnknown_08C2DBE8[] = INCBIN_U32("graphics/battle_anims/masks/stat5.gbapal.lz"); -const u32 gUnknown_08C2DC08[] = INCBIN_U32("graphics/battle_anims/masks/stat6.gbapal.lz"); -const u32 gUnknown_08C2DC28[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz"); -const u32 gUnknown_08C2DC48[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz"); +const u32 gBattleStatMask1_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat1.gbapal.lz"); +const u32 gBattleStatMask2_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat2.gbapal.lz"); +const u32 gBattleStatMask3_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat3.gbapal.lz"); +const u32 gBattleStatMask4_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat4.gbapal.lz"); +const u32 gBattleStatMask5_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat5.gbapal.lz"); +const u32 gBattleStatMask6_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat6.gbapal.lz"); +const u32 gBattleStatMask7_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz"); +const u32 gBattleStatMask8_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz"); const u32 gUnknown_08C2DC68[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.4bpp.lz"); const u32 gUnknown_08C2DDA4[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.gbapal.lz"); diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 60580ef2d..7f2eb3746 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -16,15 +16,6 @@ #include "battle_anim.h" #include "data2.h" -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; - extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[]; extern void SetMultiuseSpriteTemplateToTrainerBack(u16 backPicId, u8 battlerPosition); diff --git a/src/scanline_effect.c b/src/scanline_effect.c index 148e053fc..a9ae9427b 100644 --- a/src/scanline_effect.c +++ b/src/scanline_effect.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle.h" #include "data2.h" #include "task.h" #include "trig.h" @@ -7,15 +8,6 @@ static void CopyValue16Bit(void); static void CopyValue32Bit(void); -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; - // EWRAM vars // Per-scanline register values. diff --git a/src/title_screen.c b/src/title_screen.c index 40e0f5b2f..70a1a3449 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle.h" #include "title_screen.h" #include "sprite.h" #include "gba/m4a_internal.h" @@ -37,8 +38,6 @@ #define A_B_START_SELECT (A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON) extern struct MusicPlayerInfo gMPlayInfo_BGM; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; // this file's functions static void MainCB2(void); diff --git a/sym_ewram.txt b/sym_ewram.txt index 484f52d05..87d05adc4 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -381,8 +381,7 @@ gUnknown_0203A0F8: @ 203A0F8 gUnknown_0203A100: @ 203A100 .space 0x10 -gUnknown_0203A110: @ 203A110 - .space 0x4 + .include "src/battle_anim_utility_funcs.o" gUnknown_0203A114: @ 203A114 .space 0x4