diff options
-rw-r--r-- | asm/battle_anim.s | 495 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_anim.c | 217 |
3 files changed, 218 insertions, 495 deletions
diff --git a/asm/battle_anim.s b/asm/battle_anim.s index a64d0414a..4aaa10ba9 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -6,501 +6,6 @@ .text - thumb_func_start sub_8075624 -sub_8075624: @ 8075624 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, _080756B8 @ =gUnknown_0202F7B0 - movs r1, 0 - strb r1, [r0] - ldr r0, _080756BC @ =gUnknown_0202F7B1 - strb r1, [r0] - ldr r0, _080756C0 @ =gUnknown_0202F7B2 - strb r1, [r0] - ldr r0, _080756C4 @ =gUnknown_0202F7B3 - strb r1, [r0] - ldr r0, _080756C8 @ =gUnknown_0202F7B4 - movs r1, 0 - str r1, [r0] - ldr r0, _080756CC @ =gUnknown_0202F7B8 - str r1, [r0] - ldr r0, _080756D0 @ =gUnknown_0202F7BC - movs r2, 0 - strh r1, [r0] - ldr r0, _080756D4 @ =gUnknown_0202F7BE - strb r2, [r0] - ldr r4, _080756D8 @ =gUnknown_0202F7C2 - ldr r5, _080756DC @ =gUnknown_0202F7C4 - ldr r6, _080756E0 @ =gUnknown_0202F7C5 - ldr r7, _080756E4 @ =gUnknown_0202F7C6 - ldr r0, _080756E8 @ =gUnknown_0202F7C8 - mov r12, r0 - ldr r1, _080756EC @ =gUnknown_0202F7C9 - mov r8, r1 - ldr r0, _080756F0 @ =gUnknown_0202F7D2 - mov r9, r0 - ldr r1, _080756F4 @ =0x0000ffff - adds r3, r1, 0 - ldr r1, _080756F8 @ =gUnknown_03004B10 - movs r2, 0x7 -_0807566E: - ldrh r0, [r1] - orrs r0, r3 - strh r0, [r1] - adds r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bge _0807566E - ldr r1, _080756FC @ =gBattleAnimArgs - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xE -_08075684: - strh r2, [r0] - subs r0, 0x2 - cmp r0, r1 - bge _08075684 - movs r1, 0 - movs r0, 0xFF - strb r0, [r4] - movs r0, 0x1 - negs r0, r0 - strb r0, [r4, 0x1] - strb r1, [r5] - strb r1, [r6] - movs r0, 0 - strh r1, [r7] - mov r1, r12 - strb r0, [r1] - mov r1, r8 - strb r0, [r1] - mov r1, r9 - strb r0, [r1] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080756B8: .4byte gUnknown_0202F7B0 -_080756BC: .4byte gUnknown_0202F7B1 -_080756C0: .4byte gUnknown_0202F7B2 -_080756C4: .4byte gUnknown_0202F7B3 -_080756C8: .4byte gUnknown_0202F7B4 -_080756CC: .4byte gUnknown_0202F7B8 -_080756D0: .4byte gUnknown_0202F7BC -_080756D4: .4byte gUnknown_0202F7BE -_080756D8: .4byte gUnknown_0202F7C2 -_080756DC: .4byte gUnknown_0202F7C4 -_080756E0: .4byte gUnknown_0202F7C5 -_080756E4: .4byte gUnknown_0202F7C6 -_080756E8: .4byte gUnknown_0202F7C8 -_080756EC: .4byte gUnknown_0202F7C9 -_080756F0: .4byte gUnknown_0202F7D2 -_080756F4: .4byte 0x0000ffff -_080756F8: .4byte gUnknown_03004B10 -_080756FC: .4byte gBattleAnimArgs - thumb_func_end sub_8075624 - - thumb_func_start move_anim_start_t1 -move_anim_start_t1: @ 8075700 - push {lr} - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _08075724 @ =gUnknown_0202F7C8 - ldr r0, _08075728 @ =gUnknown_02024C07 - ldrb r0, [r0] - strb r0, [r2] - ldr r2, _0807572C @ =gUnknown_0202F7C9 - ldr r0, _08075730 @ =gUnknown_02024C08 - ldrb r0, [r0] - strb r0, [r2] - ldr r0, _08075734 @ =gBattleAnims_Moves - movs r2, 0x1 - bl move_something - pop {r0} - bx r0 - .align 2, 0 -_08075724: .4byte gUnknown_0202F7C8 -_08075728: .4byte gUnknown_02024C07 -_0807572C: .4byte gUnknown_0202F7C9 -_08075730: .4byte gUnknown_02024C08 -_08075734: .4byte gBattleAnims_Moves - thumb_func_end move_anim_start_t1 - - thumb_func_start move_something -move_something: @ 8075738 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _080757D8 - bl sub_8079E24 - movs r0, 0 - bl sub_8043EB4 - movs r4, 0 - mov r0, r8 - lsls r0, 2 - mov r10, r0 - ldr r6, _0807578C @ =gUnknown_02024A6A - movs r7, 0x64 - ldr r5, _08075790 @ =gUnknown_0202F7CA -_08075774: - lsls r0, r4, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08075798 - ldrh r0, [r6] - muls r0, r7 - ldr r1, _08075794 @ =gEnemyParty - b _0807579E - .align 2, 0 -_0807578C: .4byte gUnknown_02024A6A -_08075790: .4byte gUnknown_0202F7CA -_08075794: .4byte gEnemyParty -_08075798: - ldrh r0, [r6] - muls r0, r7 - ldr r1, _080757C0 @ =gPlayerParty -_0807579E: - adds r0, r1 - movs r1, 0xB - bl GetMonData - strh r0, [r5] - adds r6, 0x2 - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _08075774 - ldr r3, _080757C4 @ =gUnknown_0202F7C6 - ldr r5, _080757C8 @ =gUnknown_0202F7C2 - ldr r1, _080757CC @ =gUnknown_0202F7B1 - mov r12, r1 - ldr r7, _080757D0 @ =gUnknown_0202F7AC - ldr r6, _080757D4 @ =sub_80759D0 - b _080757FC - .align 2, 0 -_080757C0: .4byte gPlayerParty -_080757C4: .4byte gUnknown_0202F7C6 -_080757C8: .4byte gUnknown_0202F7C2 -_080757CC: .4byte gUnknown_0202F7B1 -_080757D0: .4byte gUnknown_0202F7AC -_080757D4: .4byte sub_80759D0 -_080757D8: - ldr r3, _08075808 @ =gUnknown_0202F7C6 - ldr r5, _0807580C @ =gUnknown_0202F7C2 - mov r0, r8 - lsls r0, 2 - mov r10, r0 - ldr r1, _08075810 @ =gUnknown_0202F7B1 - mov r12, r1 - ldr r7, _08075814 @ =gUnknown_0202F7AC - ldr r6, _08075818 @ =sub_80759D0 - ldr r2, _0807581C @ =0x02019348 - ldr r1, _08075820 @ =gUnknown_0202F7CA - movs r4, 0x3 -_080757F0: - ldrh r0, [r2] - strh r0, [r1] - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080757F0 -_080757FC: - mov r0, r9 - cmp r0, 0 - bne _08075824 - strh r0, [r3] - b _08075828 - .align 2, 0 -_08075808: .4byte gUnknown_0202F7C6 -_0807580C: .4byte gUnknown_0202F7C2 -_08075810: .4byte gUnknown_0202F7B1 -_08075814: .4byte gUnknown_0202F7AC -_08075818: .4byte sub_80759D0 -_0807581C: .4byte 0x02019348 -_08075820: .4byte gUnknown_0202F7CA -_08075824: - mov r1, r8 - strh r1, [r3] -_08075828: - ldr r1, _0807587C @ =gBattleAnimArgs - movs r2, 0 - adds r0, r1, 0 - adds r0, 0xE -_08075830: - strh r2, [r0] - subs r0, 0x2 - cmp r0, r1 - bge _08075830 - movs r0, 0xFF - strb r0, [r5] - movs r0, 0x1 - negs r0, r0 - strb r0, [r5, 0x1] - ldr r0, [sp] - add r0, r10 - ldr r0, [r0] - ldr r1, _08075880 @ =gUnknown_0202F7A4 - str r0, [r1] - movs r0, 0x1 - mov r1, r12 - strb r0, [r1] - movs r0, 0 - ldr r1, _08075884 @ =gUnknown_0202F7B0 - strb r0, [r1] - str r6, [r7] - ldr r0, _08075888 @ =0x0000ffff - adds r2, r0, 0 - ldr r1, _0807588C @ =gUnknown_03004B10 - movs r4, 0x7 -_08075862: - ldrh r0, [r1] - orrs r0, r2 - strh r0, [r1] - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _08075862 - mov r1, r9 - cmp r1, 0 - beq _080758AE - movs r4, 0 - ldr r2, _08075890 @ =gUnknown_081C7160 - b _08075896 - .align 2, 0 -_0807587C: .4byte gBattleAnimArgs -_08075880: .4byte gUnknown_0202F7A4 -_08075884: .4byte gUnknown_0202F7B0 -_08075888: .4byte 0x0000ffff -_0807588C: .4byte gUnknown_03004B10 -_08075890: .4byte gUnknown_081C7160 -_08075894: - adds r4, 0x1 -_08075896: - lsls r0, r4, 1 - adds r0, r2 - ldrh r0, [r0] - ldr r1, _080758D0 @ =0x0000ffff - cmp r0, r1 - beq _080758AE - cmp r8, r0 - bne _08075894 - ldr r0, _080758D4 @ =gMPlay_BGM - movs r2, 0x80 - bl m4aMPlayVolumeControl -_080758AE: - ldr r0, _080758D8 @ =gUnknown_030042C4 - movs r1, 0 - strh r1, [r0] - ldr r0, _080758DC @ =gUnknown_03004240 - strh r1, [r0] - ldr r0, _080758E0 @ =gUnknown_03004200 - strh r1, [r0] - ldr r0, _080758E4 @ =gUnknown_03004244 - strh r1, [r0] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080758D0: .4byte 0x0000ffff -_080758D4: .4byte gMPlay_BGM -_080758D8: .4byte gUnknown_030042C4 -_080758DC: .4byte gUnknown_03004240 -_080758E0: .4byte gUnknown_03004200 -_080758E4: .4byte gUnknown_03004244 - thumb_func_end move_something - - thumb_func_start move_anim_8072740 -move_anim_8072740: @ 80758E8 - push {r4,lr} - adds r4, r0, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl DestroySprite - ldr r1, _08075904 @ =gUnknown_0202F7B2 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08075904: .4byte gUnknown_0202F7B2 - thumb_func_end move_anim_8072740 - - thumb_func_start move_anim_task_del -move_anim_task_del: @ 8075908 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _08075920 @ =gUnknown_0202F7B2 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08075920: .4byte gUnknown_0202F7B2 - thumb_func_end move_anim_task_del - - thumb_func_start move_anim_related_task_del -move_anim_related_task_del: @ 8075924 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r1, _0807593C @ =gUnknown_0202F7B3 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0807593C: .4byte gUnknown_0202F7B3 - thumb_func_end move_anim_related_task_del - - thumb_func_start sub_8075940 -sub_8075940: @ 8075940 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r4, _08075958 @ =0x0000ffff - ldr r1, _0807595C @ =gUnknown_03004B10 -_0807594C: - ldrh r0, [r1] - cmp r0, r4 - bne _08075960 - strh r3, [r1] - b _08075968 - .align 2, 0 -_08075958: .4byte 0x0000ffff -_0807595C: .4byte gUnknown_03004B10 -_08075960: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, 0x7 - ble _0807594C -_08075968: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075940 - - thumb_func_start sub_8075970 -sub_8075970: @ 8075970 - push {r4,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r2, 0 - ldr r0, _0807598C @ =0x0000ffff - adds r4, r0, 0 - ldr r1, _08075990 @ =gUnknown_03004B10 -_0807597E: - ldrh r0, [r1] - cmp r0, r3 - bne _08075994 - orrs r0, r4 - strh r0, [r1] - b _0807599C - .align 2, 0 -_0807598C: .4byte 0x0000ffff -_08075990: .4byte gUnknown_03004B10 -_08075994: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, 0x7 - ble _0807597E -_0807599C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075970 - - thumb_func_start move_anim_waiter -move_anim_waiter: @ 80759A4 - push {lr} - ldr r2, _080759BC @ =gUnknown_0202F7B0 - ldrb r1, [r2] - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r0, 0 - bgt _080759C8 - ldr r0, _080759C0 @ =gUnknown_0202F7AC - ldr r1, _080759C4 @ =sub_80759D0 - str r1, [r0] - movs r0, 0 - b _080759CA - .align 2, 0 -_080759BC: .4byte gUnknown_0202F7B0 -_080759C0: .4byte gUnknown_0202F7AC -_080759C4: .4byte sub_80759D0 -_080759C8: - subs r0, r1, 0x1 -_080759CA: - strb r0, [r2] - pop {r0} - bx r0 - thumb_func_end move_anim_waiter - - thumb_func_start sub_80759D0 -sub_80759D0: @ 80759D0 - push {r4,lr} - ldr r4, _08075A00 @ =gUnknown_0837F4B8 -_080759D4: - ldr r0, _08075A04 @ =gUnknown_0202F7A4 - ldr r0, [r0] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _08075A08 @ =gUnknown_0202F7B0 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - bne _080759F8 - ldr r0, _08075A0C @ =gUnknown_0202F7B1 - ldrb r0, [r0] - cmp r0, 0 - bne _080759D4 -_080759F8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08075A00: .4byte gUnknown_0837F4B8 -_08075A04: .4byte gUnknown_0202F7A4 -_08075A08: .4byte gUnknown_0202F7B0 -_08075A0C: .4byte gUnknown_0202F7B1 - thumb_func_end sub_80759D0 - thumb_func_start ma00_load_graphics ma00_load_graphics: @ 8075A10 push {r4-r6,lr} diff --git a/ld_script.txt b/ld_script.txt index 304d4ebf4..d54d6ea80 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -105,6 +105,7 @@ SECTIONS { src/tileset_anim.o(.text); src/palette.o(.text); src/sound.o(.text); + src/battle_anim.o(.text); asm/battle_anim.o(.text); asm/rom_8077ABC.o(.text); src/task.o(.text); diff --git a/src/battle_anim.c b/src/battle_anim.c new file mode 100644 index 000000000..1313b69ca --- /dev/null +++ b/src/battle_anim.c @@ -0,0 +1,217 @@ +#include "global.h" +#include "asm.h" +#include "gba/m4a_internal.h" +#include "sprite.h" +#include "task.h" + +extern u16 gUnknown_02024A6A[4]; +extern u8 gUnknown_02024C07; +extern u8 gUnknown_02024C08; +extern const u8 *gUnknown_0202F7A4; +extern void (*gUnknown_0202F7AC)(void); +extern s8 gUnknown_0202F7B0; +extern u8 gUnknown_0202F7B1; +extern u8 gUnknown_0202F7B2; +extern u8 gUnknown_0202F7B3; +extern u32 gUnknown_0202F7B4; +extern u32 gUnknown_0202F7B8; +extern u16 gUnknown_0202F7BC; +extern u8 gUnknown_0202F7BE; +extern u8 gUnknown_0202F7C2[]; +extern u8 gUnknown_0202F7C4; +extern u8 gUnknown_0202F7C5; +extern u16 gUnknown_0202F7C6; +extern u8 gUnknown_0202F7C8; +extern u8 gUnknown_0202F7C9; +extern u16 gUnknown_0202F7CA[4]; +extern u8 gUnknown_0202F7D2; +extern u16 gUnknown_03004200; +extern u16 gUnknown_03004240; +extern u16 gUnknown_03004244; +extern u16 gUnknown_030042C4; +extern u16 gUnknown_03004B10[8]; +extern u16 gBattleAnimArgs[8]; +extern struct MusicPlayerInfo gMPlay_BGM; + +extern const u16 gUnknown_081C7160[]; +extern void (*gUnknown_0837F4B8[])(void); +extern const u8 *const gBattleAnims_Moves[]; + +extern u8 unk_2000000[]; + +#define EWRAM_19348 (*(u16 *)(unk_2000000 + 0x19348)) + +void sub_8075624(void) +{ + s32 i; + + gUnknown_0202F7B0 = 0; + gUnknown_0202F7B1 = 0; + gUnknown_0202F7B2 = 0; + gUnknown_0202F7B3 = 0; + gUnknown_0202F7B4 = 0; + gUnknown_0202F7B8 = 0; + gUnknown_0202F7BC = 0; + gUnknown_0202F7BE = 0; + for (i = 0; i < 8; i++) + gUnknown_03004B10[i] |= 0xFFFF; + for (i = 0; i < 8; i++) + gBattleAnimArgs[i] = 0; + gUnknown_0202F7C2[0] = 0xFF; + gUnknown_0202F7C2[1] = -1; + gUnknown_0202F7C4 = 0; + gUnknown_0202F7C5 = 0; + gUnknown_0202F7C6 = 0; + gUnknown_0202F7C8 = 0; + gUnknown_0202F7C9 = 0; + gUnknown_0202F7D2 = 0; +} + +extern void move_something(const u8 *const moveAnims[], u16 b, u8 c); + +void move_anim_start_t1(u16 a) +{ + gUnknown_0202F7C8 = gUnknown_02024C07; + gUnknown_0202F7C9 = gUnknown_02024C08; + move_something(gBattleAnims_Moves, a, 1); +} + +extern u8 sub_8076BE0(); +extern void sub_8079E24(); +extern void sub_8043EB4(); +extern void sub_80759D0(void); + +void move_something(const u8 *const moveAnims[], u16 b, u8 c) +{ + s32 i; + + if (sub_8076BE0() == 0) + { + sub_8079E24(); + sub_8043EB4(0); + for (i = 0; i < 4; i++) + { + if (battle_side_get_owner(i) != 0) + gUnknown_0202F7CA[i] = GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], 11); + else + gUnknown_0202F7CA[i] = GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], 11); + } + } + else + { + for (i = 0; i < 4; i++) + gUnknown_0202F7CA[i] = EWRAM_19348; + } + if (c == 0) + gUnknown_0202F7C6 = 0; + else + gUnknown_0202F7C6 = b; + for (i = 0; i < 8; i++) + gBattleAnimArgs[i] = 0; + gUnknown_0202F7C2[0] = 0xFF; + gUnknown_0202F7C2[1] = -1; + gUnknown_0202F7A4 = moveAnims[b]; + gUnknown_0202F7B1 = 1; + gUnknown_0202F7B0 = 0; + gUnknown_0202F7AC = sub_80759D0; + for (i = 0; i < 8; i++) + gUnknown_03004B10[i] |= 0xFFFF; + if (c != 0) + { + i = 0; + while (1) + { + if (gUnknown_081C7160[i] == 0xFFFF) + break; + if (b == gUnknown_081C7160[i]) + { + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128); + break; + } + i++; + } + } + gUnknown_030042C4 = 0; + gUnknown_03004240 = 0; + gUnknown_03004200 = 0; + gUnknown_03004244 = 0; +} + +void move_anim_8072740(struct Sprite *sprite) +{ + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + gUnknown_0202F7B2--; +} + +void move_anim_task_del(u8 taskId) +{ + DestroyTask(taskId); + gUnknown_0202F7B2--; +} + +void move_anim_related_task_del(u8 taskId) +{ + DestroyTask(taskId); + gUnknown_0202F7B3--; +} + +void sub_8075940(u16 a) +{ + s32 i; + + for (i = 0; i < 8; i++) + { + if (gUnknown_03004B10[i] == 0xFFFF) + { + gUnknown_03004B10[i] = a; + return; + } + } +} + +void sub_8075970(u16 a) +{ + s32 i; + + for (i = 0; i < 8; i++) + { + if (gUnknown_03004B10[i] == a) + { + gUnknown_03004B10[i] |= 0xFFFF; + return; + } + } +} + +void move_anim_waiter(void) +{ + if (gUnknown_0202F7B0 <= 0) + { + gUnknown_0202F7AC = sub_80759D0; + gUnknown_0202F7B0 = 0; + } + else + { + gUnknown_0202F7B0--; + } +} + +void sub_80759D0(void) +{ + do + { + gUnknown_0837F4B8[*gUnknown_0202F7A4](); + } while (gUnknown_0202F7B0 == 0 && gUnknown_0202F7B1 != 0); +} + +/* +void ma00_load_graphics(void) +{ + u8 r4 = *(gUnknown_0202F7A4++); + u8 temp = *gUnknown_0202F7A4; + + r4 |= temp << 8; + LoadCompressedObjectPic() +} +*/ |