summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_anim.s1456
-rw-r--r--data/battle_anim.s50
-rw-r--r--include/sound.h8
-rw-r--r--ld_script.txt2
-rw-r--r--src/battle_anim.c1354
-rw-r--r--src/sound.c8
-rw-r--r--sym_ewram.txt60
7 files changed, 1116 insertions, 1822 deletions
diff --git a/asm/battle_anim.s b/asm/battle_anim.s
deleted file mode 100644
index d63a8a7c3..000000000
--- a/asm/battle_anim.s
+++ /dev/null
@@ -1,1456 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8076F98
-sub_8076F98: @ 8076F98
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- bne _08076FDC
- ldr r0, _08076FD4 @ =gUnknown_0202F7C8
- ldrb r2, [r0]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r1, _08076FD8 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08076FDC
- adds r0, r2, 0
- bl battle_side_get_owner
- lsls r0, 24
- movs r4, 0xC0
- cmp r0, 0
- beq _0807706E
- movs r4, 0x3F
- b _0807706E
- .align 2, 0
-_08076FD4: .4byte gUnknown_0202F7C8
-_08076FD8: .4byte 0x02017810
-_08076FDC:
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- beq _08077004
- ldr r0, _08076FFC @ =gUnknown_0202F7C8
- ldr r1, _08077000 @ =gUnknown_0202F7C9
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bne _08077068
- cmp r0, 0x2
- bne _08077068
- cmp r4, 0x3F
- beq _0807707A
- b _08077068
- .align 2, 0
-_08076FFC: .4byte gUnknown_0202F7C8
-_08077000: .4byte gUnknown_0202F7C9
-_08077004:
- ldr r0, _0807702C @ =gUnknown_0202F7C8
- ldrb r0, [r0]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08077042
- ldr r0, _08077030 @ =gUnknown_0202F7C9
- ldrb r0, [r0]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _0807706E
- lsls r0, r4, 24
- asrs r1, r0, 24
- cmp r1, 0x3F
- bne _08077034
- movs r4, 0xC0
- b _0807706E
- .align 2, 0
-_0807702C: .4byte gUnknown_0202F7C8
-_08077030: .4byte gUnknown_0202F7C9
-_08077034:
- movs r0, 0x40
- negs r0, r0
- cmp r1, r0
- beq _0807706E
- negs r0, r1
- lsls r0, 24
- b _0807706C
-_08077042:
- ldr r0, _08077064 @ =gUnknown_0202F7C9
- ldrb r0, [r0]
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08077068
- lsls r0, r4, 24
- asrs r0, 24
- movs r1, 0x40
- negs r1, r1
- cmp r0, r1
- bne _0807706E
- movs r4, 0x3F
- b _0807706E
- .align 2, 0
-_08077064: .4byte gUnknown_0202F7C9
-_08077068:
- lsls r0, r4, 24
- negs r0, r0
-_0807706C:
- lsrs r4, r0, 24
-_0807706E:
- lsls r0, r4, 24
- asrs r0, 24
- cmp r0, 0x3F
- ble _0807707A
- movs r4, 0x3F
- b _08077088
-_0807707A:
- lsls r0, r4, 24
- asrs r0, 24
- movs r1, 0x40
- negs r1, r1
- cmp r0, r1
- bge _08077088
- movs r4, 0xC0
-_08077088:
- lsls r0, r4, 24
- asrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8076F98
-
- thumb_func_start sub_8077094
-sub_8077094: @ 8077094
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- bne _080770D8
- ldr r0, _080770D0 @ =gUnknown_0202F7C8
- ldrb r2, [r0]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r1, _080770D4 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080770D8
- adds r0, r2, 0
- bl battle_side_get_owner
- lsls r0, 24
- movs r4, 0xC0
- cmp r0, 0
- beq _080770F6
- movs r4, 0x3F
- b _080770F6
- .align 2, 0
-_080770D0: .4byte gUnknown_0202F7C8
-_080770D4: .4byte 0x02017810
-_080770D8:
- ldr r0, _08077100 @ =gUnknown_0202F7C8
- ldrb r0, [r0]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080770F0
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- beq _080770F6
-_080770F0:
- lsls r0, r4, 24
- negs r0, r0
- lsrs r4, r0, 24
-_080770F6:
- lsls r0, r4, 24
- asrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08077100: .4byte gUnknown_0202F7C8
- thumb_func_end sub_8077094
-
- thumb_func_start sub_8077104
-sub_8077104: @ 8077104
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r2, r0, 16
- cmp r2, 0x3F
- ble _08077114
- movs r1, 0x3F
- b _0807711E
-_08077114:
- movs r0, 0x40
- negs r0, r0
- cmp r2, r0
- bge _0807711E
- ldr r1, _08077128 @ =0x0000ffc0
-_0807711E:
- lsls r0, r1, 16
- asrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_08077128: .4byte 0x0000ffc0
- thumb_func_end sub_8077104
-
- thumb_func_start sub_807712C
-sub_807712C: @ 807712C
- push {lr}
- lsls r2, 16
- lsrs r2, 16
- adds r3, r2, 0
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- cmp r0, r1
- bge _0807714A
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0
- bge _0807715A
- b _08077158
-_0807714A:
- cmp r0, r1
- ble _08077160
- lsls r0, r3, 16
- asrs r0, 16
- cmp r0, 0
- bge _08077158
- negs r0, r0
-_08077158:
- negs r0, r0
-_0807715A:
- lsls r0, 16
- lsrs r0, 16
- b _08077162
-_08077160:
- movs r0, 0
-_08077162:
- lsls r0, 16
- asrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_807712C
-
- thumb_func_start ma19_08073BC8
-ma19_08073BC8: @ 807716C
- push {r4,r5,lr}
- ldr r5, _080771A0 @ =gUnknown_0202F7A4
- ldr r0, [r5]
- adds r1, r0, 0x1
- str r1, [r5]
- ldrb r4, [r0, 0x1]
- ldrb r0, [r1, 0x1]
- lsls r0, 8
- orrs r4, r0
- movs r0, 0x2
- ldrsb r0, [r1, r0]
- bl sub_8076F98
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- adds r0, r4, 0
- bl PlaySE12WithPanning
- ldr r0, [r5]
- adds r0, 0x3
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080771A0: .4byte gUnknown_0202F7A4
- thumb_func_end ma19_08073BC8
-
- thumb_func_start ma1A_8073C00
-ma1A_8073C00: @ 80771A4
- push {r4,lr}
- ldr r4, _080771CC @ =gUnknown_0202F7A4
- ldr r1, [r4]
- adds r0, r1, 0x1
- str r0, [r4]
- movs r0, 0x1
- ldrsb r0, [r1, r0]
- bl sub_8076F98
- lsls r0, 24
- asrs r0, 24
- bl SE12PanpotControl
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080771CC: .4byte gUnknown_0202F7A4
- thumb_func_end ma1A_8073C00
-
- thumb_func_start ma1B_8073C2C
-ma1B_8073C2C: @ 80771D0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _08077280 @ =gUnknown_0202F7A4
- mov r10, r0
- ldr r0, [r0]
- adds r1, r0, 0x1
- mov r2, r10
- str r1, [r2]
- ldrb r0, [r0, 0x1]
- mov r9, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 8
- mov r2, r9
- orrs r2, r0
- mov r9, r2
- ldrb r4, [r1, 0x3]
- ldrb r6, [r1, 0x4]
- ldrb r7, [r1, 0x5]
- movs r0, 0x2
- ldrsb r0, [r1, r0]
- bl sub_8076F98
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, 24
- asrs r4, 24
- adds r0, r4, 0
- bl sub_8076F98
- mov r8, r0
- lsls r5, 24
- asrs r5, 24
- mov r0, r8
- lsls r0, 24
- asrs r0, 24
- mov r8, r0
- lsls r6, 24
- asrs r6, 24
- adds r0, r5, 0
- mov r1, r8
- adds r2, r6, 0
- bl sub_807712C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08077284 @ =c3_08073CEC
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08077288 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r5, [r1, 0x8]
- mov r2, r8
- strh r2, [r1, 0xA]
- lsls r4, 24
- asrs r4, 24
- strh r4, [r1, 0xC]
- strh r7, [r1, 0xE]
- strh r5, [r1, 0x10]
- mov r0, r9
- adds r1, r5, 0
- bl PlaySE12WithPanning
- ldr r1, _0807728C @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r1, r10
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08077280: .4byte gUnknown_0202F7A4
-_08077284: .4byte c3_08073CEC
-_08077288: .4byte gTasks
-_0807728C: .4byte gUnknown_0202F7B3
- thumb_func_end ma1B_8073C2C
-
- thumb_func_start c3_08073CEC
-c3_08073CEC: @ 8077290
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r7, 0
- ldr r1, _080772D4 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r2, r0, r1
- ldrh r0, [r2, 0x18]
- adds r1, r0, 0x1
- strh r1, [r2, 0x18]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0xE
- ldrsh r1, [r2, r3]
- cmp r0, r1
- blt _08077314
- strh r7, [r2, 0x18]
- ldrh r6, [r2, 0x8]
- ldrh r3, [r2, 0xA]
- movs r4, 0x10
- ldrsh r0, [r2, r4]
- movs r4, 0xC
- ldrsh r1, [r2, r4]
- adds r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- strh r4, [r2, 0x10]
- cmp r1, 0
- bne _080772D8
- lsls r2, r3, 16
- b _080772FC
- .align 2, 0
-_080772D4: .4byte gTasks
-_080772D8:
- lsls r1, r6, 16
- lsls r0, r3, 16
- asrs r3, r0, 16
- adds r2, r0, 0
- cmp r1, r2
- bge _080772EE
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, r3
- blt _080772F8
- b _080772FC
-_080772EE:
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, r3
- bgt _080772F8
- movs r7, 0x1
-_080772F8:
- cmp r7, 0
- beq _0807730C
-_080772FC:
- lsrs r4, r2, 16
- adds r0, r5, 0
- bl DestroyTask
- ldr r1, _0807731C @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
-_0807730C:
- lsls r0, r4, 24
- asrs r0, 24
- bl SE12PanpotControl
-_08077314:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807731C: .4byte gUnknown_0202F7B3
- thumb_func_end c3_08073CEC
-
- thumb_func_start sub_8077320
-sub_8077320: @ 8077320
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- ldr r0, _080773A4 @ =gUnknown_0202F7A4
- mov r9, r0
- ldr r0, [r0]
- adds r1, r0, 0x1
- mov r2, r9
- str r1, [r2]
- ldrb r0, [r0, 0x1]
- mov r8, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 8
- mov r2, r8
- orrs r2, r0
- mov r8, r2
- ldrb r4, [r1, 0x2]
- ldrb r5, [r1, 0x3]
- ldrb r6, [r1, 0x4]
- ldrb r1, [r1, 0x5]
- mov r10, r1
- ldr r0, _080773A8 @ =c3_08073CEC
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080773AC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- lsls r4, 24
- asrs r4, 24
- strh r4, [r1, 0x8]
- lsls r5, 24
- asrs r5, 24
- strh r5, [r1, 0xA]
- lsls r6, 24
- asrs r6, 24
- strh r6, [r1, 0xC]
- mov r0, r10
- strh r0, [r1, 0xE]
- strh r4, [r1, 0x10]
- mov r0, r8
- adds r1, r4, 0
- bl PlaySE12WithPanning
- ldr r1, _080773B0 @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r1, r9
- ldr r0, [r1]
- adds r0, 0x6
- str r0, [r1]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080773A4: .4byte gUnknown_0202F7A4
-_080773A8: .4byte c3_08073CEC
-_080773AC: .4byte gTasks
-_080773B0: .4byte gUnknown_0202F7B3
- thumb_func_end sub_8077320
-
- thumb_func_start sub_80773B4
-sub_80773B4: @ 80773B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _08077464 @ =gUnknown_0202F7A4
- mov r10, r0
- ldr r0, [r0]
- adds r1, r0, 0x1
- mov r2, r10
- str r1, [r2]
- ldrb r0, [r0, 0x1]
- mov r9, r0
- ldrb r0, [r1, 0x1]
- lsls r0, 8
- mov r2, r9
- orrs r2, r0
- mov r9, r2
- ldrb r4, [r1, 0x3]
- ldrb r0, [r1, 0x4]
- mov r8, r0
- ldrb r7, [r1, 0x5]
- movs r0, 0x2
- ldrsb r0, [r1, r0]
- bl sub_8077094
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r4, 24
- asrs r4, 24
- adds r0, r4, 0
- bl sub_8077094
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- mov r1, r8
- lsls r1, 24
- asrs r1, 24
- mov r8, r1
- mov r0, r8
- bl sub_8077094
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08077468 @ =c3_08073CEC
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0807746C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- lsls r6, 24
- asrs r6, 24
- strh r6, [r1, 0x8]
- lsls r5, 24
- asrs r5, 24
- strh r5, [r1, 0xA]
- lsls r4, 24
- asrs r4, 24
- strh r4, [r1, 0xC]
- strh r7, [r1, 0xE]
- strh r6, [r1, 0x10]
- mov r0, r9
- adds r1, r6, 0
- bl PlaySE12WithPanning
- ldr r1, _08077470 @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- mov r2, r10
- ldr r0, [r2]
- adds r0, 0x6
- str r0, [r2]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08077464: .4byte gUnknown_0202F7A4
-_08077468: .4byte c3_08073CEC
-_0807746C: .4byte gTasks
-_08077470: .4byte gUnknown_0202F7B3
- thumb_func_end sub_80773B4
-
- thumb_func_start ma1C_8073ED0
-ma1C_8073ED0: @ 8077474
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- ldr r6, _080774EC @ =gUnknown_0202F7A4
- ldr r0, [r6]
- adds r1, r0, 0x1
- str r1, [r6]
- ldrb r5, [r0, 0x1]
- ldrb r0, [r1, 0x1]
- lsls r0, 8
- orrs r5, r0
- ldrb r0, [r1, 0x3]
- mov r8, r0
- ldrb r2, [r1, 0x4]
- mov r9, r2
- movs r0, 0x2
- ldrsb r0, [r1, r0]
- bl sub_8076F98
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080774F0 @ =sub_80774FC
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080774F4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r5, [r1, 0x8]
- lsls r4, 24
- asrs r4, 24
- strh r4, [r1, 0xA]
- mov r2, r8
- strh r2, [r1, 0xC]
- mov r2, r9
- strh r2, [r1, 0xE]
- mov r2, r8
- strh r2, [r1, 0x18]
- ldr r1, [r1]
- bl _call_via_r1
- ldr r1, _080774F8 @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r6]
- adds r0, 0x5
- str r0, [r6]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080774EC: .4byte gUnknown_0202F7A4
-_080774F0: .4byte sub_80774FC
-_080774F4: .4byte gTasks
-_080774F8: .4byte gUnknown_0202F7B3
- thumb_func_end ma1C_8073ED0
-
- thumb_func_start sub_80774FC
-sub_80774FC: @ 80774FC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08077550 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r2, r0, r1
- ldrh r0, [r2, 0x18]
- adds r1, r0, 0x1
- strh r1, [r2, 0x18]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0xC
- ldrsh r1, [r2, r3]
- cmp r0, r1
- blt _0807754A
- movs r0, 0
- strh r0, [r2, 0x18]
- ldrh r0, [r2, 0x8]
- ldrb r1, [r2, 0xA]
- ldrh r4, [r2, 0xE]
- subs r4, 0x1
- strh r4, [r2, 0xE]
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- cmp r4, 0
- bne _0807754A
- adds r0, r5, 0
- bl DestroyTask
- ldr r1, _08077554 @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
-_0807754A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08077550: .4byte gTasks
-_08077554: .4byte gUnknown_0202F7B3
- thumb_func_end sub_80774FC
-
- thumb_func_start ma1D_08073FB4
-ma1D_08073FB4: @ 8077558
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r6, _080775BC @ =gUnknown_0202F7A4
- ldr r0, [r6]
- adds r1, r0, 0x1
- str r1, [r6]
- ldrb r5, [r0, 0x1]
- ldrb r0, [r1, 0x1]
- lsls r0, 8
- orrs r5, r0
- ldrb r0, [r1, 0x3]
- mov r8, r0
- movs r0, 0x2
- ldrsb r0, [r1, r0]
- bl sub_8076F98
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080775C0 @ =sub_80775CC
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080775C4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r5, [r1, 0x8]
- lsls r4, 24
- asrs r4, 24
- strh r4, [r1, 0xA]
- mov r0, r8
- strh r0, [r1, 0xC]
- ldr r1, _080775C8 @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, [r6]
- adds r0, 0x4
- str r0, [r6]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080775BC: .4byte gUnknown_0202F7A4
-_080775C0: .4byte sub_80775CC
-_080775C4: .4byte gTasks
-_080775C8: .4byte gUnknown_0202F7B3
- thumb_func_end ma1D_08073FB4
-
- thumb_func_start sub_80775CC
-sub_80775CC: @ 80775CC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _08077608 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r2, r0, r1
- ldrh r0, [r2, 0xC]
- subs r1, r0, 0x1
- strh r1, [r2, 0xC]
- lsls r0, 16
- cmp r0, 0
- bgt _08077600
- ldrh r0, [r2, 0x8]
- movs r1, 0xA
- ldrsb r1, [r2, r1]
- bl PlaySE12WithPanning
- adds r0, r4, 0
- bl DestroyTask
- ldr r1, _0807760C @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
-_08077600:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08077608: .4byte gTasks
-_0807760C: .4byte gUnknown_0202F7B3
- thumb_func_end sub_80775CC
-
- thumb_func_start sub_8077610
-sub_8077610: @ 8077610
- push {r4-r6,lr}
- ldr r4, _08077678 @ =gUnknown_0202F7A4
- ldr r1, [r4]
- adds r3, r1, 0x1
- str r3, [r4]
- ldrb r2, [r1, 0x1]
- ldrb r0, [r3, 0x1]
- lsls r0, 8
- adds r2, r0
- ldrb r0, [r3, 0x2]
- lsls r0, 16
- adds r2, r0
- ldrb r0, [r3, 0x3]
- lsls r0, 24
- adds r6, r2, r0
- adds r0, r1, 0x5
- str r0, [r4]
- ldrb r0, [r1, 0x5]
- adds r1, 0x6
- str r1, [r4]
- cmp r0, 0
- beq _0807765A
- adds r5, r4, 0
- ldr r4, _0807767C @ =gBattleAnimArgs
- adds r3, r0, 0
-_08077642:
- ldr r2, [r5]
- ldrb r1, [r2]
- ldrb r0, [r2, 0x1]
- lsls r0, 8
- orrs r1, r0
- strh r1, [r4]
- adds r2, 0x2
- str r2, [r5]
- adds r4, 0x2
- subs r3, 0x1
- cmp r3, 0
- bne _08077642
-_0807765A:
- adds r0, r6, 0
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r6
- ldr r1, _08077680 @ =gUnknown_0202F7B3
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08077678: .4byte gUnknown_0202F7A4
-_0807767C: .4byte gBattleAnimArgs
-_08077680: .4byte gUnknown_0202F7B3
- thumb_func_end sub_8077610
-
- thumb_func_start ma20_wait_for_something
-ma20_wait_for_something: @ 8077684
- push {r4,r5,lr}
- ldr r0, _080776BC @ =gUnknown_0202F7B3
- ldrb r5, [r0]
- cmp r5, 0
- bne _080776CC
- bl IsSEPlaying
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _080776E4
- ldr r4, _080776C0 @ =gUnknown_03004AF0
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x5A
- bls _080776D2
- ldr r0, _080776C4 @ =gMPlay_SE1
- bl m4aMPlayStop
- ldr r0, _080776C8 @ =gMPlay_SE2
- bl m4aMPlayStop
- strh r5, [r4]
- b _080776F6
- .align 2, 0
-_080776BC: .4byte gUnknown_0202F7B3
-_080776C0: .4byte gUnknown_03004AF0
-_080776C4: .4byte gMPlay_SE1
-_080776C8: .4byte gMPlay_SE2
-_080776CC:
- ldr r1, _080776DC @ =gUnknown_03004AF0
- movs r0, 0
- strh r0, [r1]
-_080776D2:
- ldr r1, _080776E0 @ =gUnknown_0202F7B0
- movs r0, 0x1
- strb r0, [r1]
- b _080776F6
- .align 2, 0
-_080776DC: .4byte gUnknown_03004AF0
-_080776E0: .4byte gUnknown_0202F7B0
-_080776E4:
- ldr r0, _080776FC @ =gUnknown_03004AF0
- movs r2, 0
- strh r1, [r0]
- ldr r1, _08077700 @ =gUnknown_0202F7A4
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- ldr r0, _08077704 @ =gUnknown_0202F7B0
- strb r2, [r0]
-_080776F6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080776FC: .4byte gUnknown_03004AF0
-_08077700: .4byte gUnknown_0202F7A4
-_08077704: .4byte gUnknown_0202F7B0
- thumb_func_end ma20_wait_for_something
-
- thumb_func_start ma21_08074164
-ma21_08074164: @ 8077708
- push {r4-r6,lr}
- ldr r5, _08077748 @ =gUnknown_0202F7A4
- ldr r4, [r5]
- adds r3, r4, 0x1
- str r3, [r5]
- ldrb r2, [r4, 0x1]
- ldrb r1, [r3, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r0, _0807774C @ =gBattleAnimArgs
- lsls r2, 1
- adds r2, r0
- lsls r1, 16
- asrs r1, 16
- movs r6, 0
- ldrsh r0, [r2, r6]
- cmp r1, r0
- bne _08077750
- ldrb r1, [r3, 0x3]
- ldrb r0, [r3, 0x4]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r3, 0x5]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r3, 0x6]
- lsls r0, 24
- adds r1, r0
- str r1, [r5]
- b _08077756
- .align 2, 0
-_08077748: .4byte gUnknown_0202F7A4
-_0807774C: .4byte gBattleAnimArgs
-_08077750:
- adds r0, r4, 0
- adds r0, 0x8
- str r0, [r5]
-_08077756:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end ma21_08074164
-
- thumb_func_start sub_807775C
-sub_807775C: @ 807775C
- push {r4,lr}
- ldr r4, _0807778C @ =gUnknown_0202F7A4
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- beq _08077790
- ldr r2, [r4]
- ldrb r1, [r2]
- ldrb r0, [r2, 0x1]
- lsls r0, 8
- adds r1, r0
- ldrb r0, [r2, 0x2]
- lsls r0, 16
- adds r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 24
- adds r1, r0
- str r1, [r4]
- b _08077796
- .align 2, 0
-_0807778C: .4byte gUnknown_0202F7A4
-_08077790:
- ldr r0, [r4]
- adds r0, 0x4
- str r0, [r4]
-_08077796:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_807775C
-
- thumb_func_start sub_807779C
-sub_807779C: @ 807779C
- push {r4,lr}
- ldr r0, _080777B0 @ =gUnknown_0202F7A4
- ldr r1, [r0]
- ldrb r2, [r1, 0x1]
- adds r1, 0x2
- str r1, [r0]
- cmp r2, 0
- beq _080777B8
- ldr r0, _080777B4 @ =gUnknown_0202F7C9
- b _080777BA
- .align 2, 0
-_080777B0: .4byte gUnknown_0202F7A4
-_080777B4: .4byte gUnknown_0202F7C9
-_080777B8:
- ldr r0, _080777FC @ =gUnknown_0202F7C8
-_080777BA:
- ldrb r0, [r0]
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- bne _080777F4
- cmp r4, 0
- beq _080777D6
- cmp r4, 0x3
- bne _080777F4
-_080777D6:
- ldr r3, _08077800 @ =REG_BG1CNT
- ldrb r2, [r3]
- movs r1, 0x4
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- movs r2, 0x1
- orrs r0, r2
- strb r0, [r3]
- ldr r2, _08077804 @ =REG_BG2CNT
- ldrb r0, [r2]
- ands r1, r0
- movs r0, 0x2
- orrs r1, r0
- strb r1, [r2]
-_080777F4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080777FC: .4byte gUnknown_0202F7C8
-_08077800: .4byte REG_BG1CNT
-_08077804: .4byte REG_BG2CNT
- thumb_func_end sub_807779C
-
- thumb_func_start sub_8077808
-sub_8077808: @ 8077808
- push {lr}
- ldr r0, _08077840 @ =gUnknown_0202F7A4
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- bne _0807783A
- ldr r3, _08077844 @ =REG_BG1CNT
- ldrb r2, [r3]
- movs r1, 0x4
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- movs r2, 0x1
- orrs r0, r2
- strb r0, [r3]
- ldr r2, _08077848 @ =REG_BG2CNT
- ldrb r0, [r2]
- ands r1, r0
- movs r0, 0x2
- orrs r1, r0
- strb r1, [r2]
-_0807783A:
- pop {r0}
- bx r0
- .align 2, 0
-_08077840: .4byte gUnknown_0202F7A4
-_08077844: .4byte REG_BG1CNT
-_08077848: .4byte REG_BG2CNT
- thumb_func_end sub_8077808
-
- thumb_func_start sub_807784C
-sub_807784C: @ 807784C
- push {r4-r7,lr}
- ldr r1, _0807787C @ =gUnknown_0202F7A4
- ldr r0, [r1]
- ldrb r6, [r0, 0x1]
- adds r0, 0x2
- str r0, [r1]
- ldr r7, _08077880 @ =gUnknown_0202F7C8
- ldrb r0, [r7]
- bl battle_side_get_owner
- adds r4, r0, 0
- ldr r5, _08077884 @ =gUnknown_0202F7C9
- ldrb r0, [r5]
- bl battle_side_get_owner
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- beq _080778C2
- cmp r6, 0
- beq _08077888
- ldrb r0, [r5]
- b _0807788A
- .align 2, 0
-_0807787C: .4byte gUnknown_0202F7A4
-_08077880: .4byte gUnknown_0202F7C8
-_08077884: .4byte gUnknown_0202F7C9
-_08077888:
- ldrb r0, [r7]
-_0807788A:
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- bne _080778C2
- cmp r4, 0
- beq _080778A4
- cmp r4, 0x3
- bne _080778C2
-_080778A4:
- ldr r3, _080778C8 @ =REG_BG1CNT
- ldrb r2, [r3]
- movs r1, 0x4
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- movs r2, 0x1
- orrs r0, r2
- strb r0, [r3]
- ldr r2, _080778CC @ =REG_BG2CNT
- ldrb r0, [r2]
- ands r1, r0
- movs r0, 0x2
- orrs r1, r0
- strb r1, [r2]
-_080778C2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080778C8: .4byte REG_BG1CNT
-_080778CC: .4byte REG_BG2CNT
- thumb_func_end sub_807784C
-
- thumb_func_start ma2B_make_side_invisible
-ma2B_make_side_invisible: @ 80778D0
- push {r4,lr}
- ldr r4, _08077904 @ =gUnknown_0202F7A4
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl obj_id_for_side_relative_to_move
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080778F8
- ldr r1, _08077908 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_080778F8:
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08077904: .4byte gUnknown_0202F7A4
-_08077908: .4byte gSprites
- thumb_func_end ma2B_make_side_invisible
-
- thumb_func_start ma2C_make_side_visible
-ma2C_make_side_visible: @ 807790C
- push {r4,lr}
- ldr r4, _08077944 @ =gUnknown_0202F7A4
- ldr r0, [r4]
- ldrb r0, [r0, 0x1]
- bl obj_id_for_side_relative_to_move
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _08077936
- ldr r1, _08077948 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
-_08077936:
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08077944: .4byte gUnknown_0202F7A4
-_08077948: .4byte gSprites
- thumb_func_end ma2C_make_side_visible
-
- thumb_func_start sub_807794C
-sub_807794C: @ 807794C
- push {r4-r7,lr}
- ldr r1, _08077998 @ =gUnknown_0202F7A4
- ldr r0, [r1]
- ldrb r7, [r0, 0x1]
- adds r0, 0x2
- str r0, [r1]
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- bne _080779F6
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080779F6
- ldr r6, _0807799C @ =gUnknown_0202F7C8
- ldrb r0, [r6]
- bl battle_side_get_owner
- adds r4, r0, 0
- ldr r5, _080779A0 @ =gUnknown_0202F7C9
- ldrb r0, [r5]
- bl battle_side_get_owner
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _080779F6
- cmp r7, 0
- bne _080779A4
- ldrb r0, [r6]
- bl battle_get_per_side_status_permutated
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- b _080779B0
- .align 2, 0
-_08077998: .4byte gUnknown_0202F7A4
-_0807799C: .4byte gUnknown_0202F7C8
-_080779A0: .4byte gUnknown_0202F7C9
-_080779A4:
- ldrb r0, [r5]
- bl battle_get_per_side_status_permutated
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x1
-_080779B0:
- bl obj_id_for_side_relative_to_move
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080779F6
- ldr r1, _080779EC @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r2, r0, r1
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- cmp r4, 0x2
- bne _080779E0
- ldrb r0, [r2, 0x5]
- movs r1, 0xC
- orrs r0, r1
- strb r0, [r2, 0x5]
-_080779E0:
- cmp r4, 0x1
- bne _080779F0
- movs r0, 0
- bl sub_8076464
- b _080779F6
- .align 2, 0
-_080779EC: .4byte gSprites
-_080779F0:
- movs r0, 0x1
- bl sub_8076464
-_080779F6:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_807794C
-
- thumb_func_start sub_80779FC
-sub_80779FC: @ 80779FC
- push {r4-r7,lr}
- ldr r1, _08077A48 @ =gUnknown_0202F7A4
- ldr r0, [r1]
- ldrb r7, [r0, 0x1]
- adds r0, 0x2
- str r0, [r1]
- bl sub_8076BE0
- lsls r0, 24
- cmp r0, 0
- bne _08077A88
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _08077A88
- ldr r6, _08077A4C @ =gUnknown_0202F7C8
- ldrb r0, [r6]
- bl battle_side_get_owner
- adds r4, r0, 0
- ldr r5, _08077A50 @ =gUnknown_0202F7C9
- ldrb r0, [r5]
- bl battle_side_get_owner
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _08077A88
- cmp r7, 0
- bne _08077A54
- ldrb r0, [r6]
- bl battle_get_per_side_status_permutated
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- b _08077A60
- .align 2, 0
-_08077A48: .4byte gUnknown_0202F7A4
-_08077A4C: .4byte gUnknown_0202F7C8
-_08077A50: .4byte gUnknown_0202F7C9
-_08077A54:
- ldrb r0, [r5]
- bl battle_get_per_side_status_permutated
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0x1
-_08077A60:
- bl obj_id_for_side_relative_to_move
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _08077A88
- cmp r4, 0x2
- bne _08077A88
- ldr r1, _08077A90 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0, 0x5]
-_08077A88:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08077A90: .4byte gSprites
- thumb_func_end sub_80779FC
-
- thumb_func_start ma2F_stop_music
-ma2F_stop_music: @ 8077A94
- push {lr}
- ldr r0, _08077AB0 @ =gMPlay_SE1
- bl m4aMPlayStop
- ldr r0, _08077AB4 @ =gMPlay_SE2
- bl m4aMPlayStop
- ldr r1, _08077AB8 @ =gUnknown_0202F7A4
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08077AB0: .4byte gMPlay_SE1
-_08077AB4: .4byte gMPlay_SE2
-_08077AB8: .4byte gUnknown_0202F7A4
- thumb_func_end ma2F_stop_music
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/battle_anim.s b/data/battle_anim.s
index 49f286c60..ed880ba77 100644
--- a/data/battle_anim.s
+++ b/data/battle_anim.s
@@ -1049,53 +1049,3 @@ gBattleAnimBackgroundTable:: @ 837F374
.4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_24, gBattleAnimBackgroundTilemap_05
.4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_24, gBattleAnimBackgroundTilemap_06
- .align 2
-gUnknown_0837F4B8:: @ 837F4B8
- .4byte ma00_load_graphics
- .4byte ma01_080728D0
- .4byte ma02_instanciate_template
- .4byte sub_8075BB8
- .4byte ma04_wait_countdown
- .4byte sub_8075C74
- .4byte nullsub_53
- .4byte nullsub_88
- .4byte sub_8075CB0
- .4byte ma09_play_sound
- .4byte sub_8075DE0
- .4byte ma0B_0807324C
- .4byte sub_8076A3C
- .4byte sub_8076AA0
- .4byte ma0E_call
- .4byte sub_8076AF0
- .4byte ma10_080736AC
- .4byte ma11_if_else
- .4byte ma12_cond_if
- .4byte sub_8076BBC
- .4byte ma14_load_background
- .4byte ma15_load_battle_screen_elements
- .4byte ma16_wait_for_battle_screen_elements_s2
- .4byte sub_8076F44
- .4byte ma18_load_background_probably
- .4byte ma19_08073BC8
- .4byte ma1A_8073C00
- .4byte ma1B_8073C2C
- .4byte ma1C_8073ED0
- .4byte ma1D_08073FB4
- .4byte sub_8076A78
- .4byte sub_8077610
- .4byte ma20_wait_for_something
- .4byte ma21_08074164
- .4byte sub_80767C4
- .4byte ma23_8073484
- .4byte sub_807775C
- .4byte sub_8076C4C
- .4byte sub_8077320
- .4byte sub_80773B4
- .4byte sub_807779C
- .4byte sub_8077808
- .4byte sub_807784C
- .4byte ma2B_make_side_invisible
- .4byte ma2C_make_side_visible
- .4byte sub_807794C
- .4byte sub_80779FC
- .4byte ma2F_stop_music
diff --git a/include/sound.h b/include/sound.h
index 1a5161ca8..283b2b1f9 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -35,10 +35,10 @@ bool8 IsCryPlayingOrClearCrySongs(void);
bool8 IsCryPlaying(void);
void PlayBGM(u16 songNum);
void PlaySE(u16 songNum);
-void PlaySE12WithPanning(u16 songNum, u8 pan);
-void PlaySE1WithPanning(u16 songNum, u8 pan);
-void PlaySE2WithPanning(u16 songNum, u8 pan);
-void SE12PanpotControl(u8 pan);
+void PlaySE12WithPanning(u16 songNum, s8 pan);
+void PlaySE1WithPanning(u16 songNum, s8 pan);
+void PlaySE2WithPanning(u16 songNum, s8 pan);
+void SE12PanpotControl(s8 pan);
bool8 IsSEPlaying(void);
bool8 IsBGMPlaying(void);
bool8 IsSpecialSEPlaying(void);
diff --git a/ld_script.txt b/ld_script.txt
index 0456f1edf..49978ccaf 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -106,7 +106,6 @@ SECTIONS {
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);
asm/rom5.o(.text);
@@ -330,6 +329,7 @@ SECTIONS {
src/palette.o(.rodata);
src/sound.o(.rodata);
data/battle_anim.o(.rodata);
+ src/battle_anim.o(.rodata);
data/rom_8077ABC.o(.rodata);
data/map_events.o(.rodata);
data/data_8393054.o(.rodata);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 3fffe5dd6..9464b4949 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -7,40 +7,80 @@
#include "sprite.h"
#include "task.h"
+#define SCRIPT_READ_8(ptr) ((ptr)[0])
+#define SCRIPT_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
+#define SCRIPT_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
+
+#define REG_BGnCNT_BITFIELD(n) (*(struct BGCntrlBitfield *)REG_ADDR_BG##n##CNT)
+#define REG_BG1CNT_BITFIELD REG_BGnCNT_BITFIELD(1)
+#define REG_BG2CNT_BITFIELD REG_BGnCNT_BITFIELD(2)
+
+#define EWRAM_14800 ((u16 *)(unk_2000000 + 0x14800))
+#define EWRAM_17800 ((struct UnknownStruct1 *)(unk_2000000 + 0x17800))
+#define EWRAM_17810 ((struct UnknownStruct3 *)(unk_2000000 + 0x17810))
+#define EWRAM_18000 ((u16 *)(unk_2000000 + 0x18000))
+#define EWRAM_19348 (*(u16 *)(unk_2000000 + 0x19348))
+
+struct BGCntrlBitfield
+{
+ volatile u16 priority:2;
+ volatile u16 charBaseBlock:2;
+ volatile u16 field_0_2:4;
+ volatile u16 field_1_0:5;
+ volatile u16 areaOverflowMode:1;
+ volatile u16 screenSize:2;
+};
+
+struct BattleAnimBackground
+{
+ void *image;
+ void *palette;
+ void *tilemap;
+};
+
struct UnknownStruct1
{
u8 unk0;
};
+struct UnknownStruct2
+{
+ void *unk0;
+ u16 *unk4;
+ u8 unk8;
+};
+
struct UnknownStruct3
{
u8 unk0;
u8 filler1[0xB];
};
+extern u8 unk_2000000[];
extern u16 gUnknown_02024A6A[4];
extern u8 gUnknown_02024BE0[];
extern u8 gUnknown_02024C07;
extern u8 gUnknown_02024C08;
-extern const u8 *gUnknown_0202F7A4;
-extern const u8 *gUnknown_0202F7A8;
-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;
+EWRAM_DATA const u8 *gBattleAnimScriptPtr = NULL;
+EWRAM_DATA const u8 *gBattleAnimScriptRetAddr = NULL;
+EWRAM_DATA void (*gUnknown_0202F7AC)(void) = NULL;
+EWRAM_DATA s8 gUnknown_0202F7B0 = 0;
+EWRAM_DATA u8 gUnknown_0202F7B1 = 0;
+EWRAM_DATA u8 gUnknown_0202F7B2 = 0;
+EWRAM_DATA u8 gUnknown_0202F7B3 = 0;
+EWRAM_DATA u32 gUnknown_0202F7B4 = 0;
+EWRAM_DATA u32 gUnknown_0202F7B8 = 0;
+EWRAM_DATA u16 gUnknown_0202F7BC = 0;
+EWRAM_DATA u8 gUnknown_0202F7BE = 0;
+EWRAM_DATA u16 gUnknown_0202F7C0 = 0;
+EWRAM_DATA u8 gUnknown_0202F7C2[2] = {0};
+EWRAM_DATA u8 gUnknown_0202F7C4 = 0;
+EWRAM_DATA u8 gUnknown_0202F7C5 = 0;
+EWRAM_DATA u16 gUnknown_0202F7C6 = 0;
+EWRAM_DATA u8 gUnknown_0202F7C8 = 0;
+EWRAM_DATA u8 gUnknown_0202F7C9 = 0;
+EWRAM_DATA u16 gUnknown_0202F7CA[4] = {0};
+EWRAM_DATA u8 gUnknown_0202F7D2 = 0;
extern u16 gUnknown_030041B4;
extern u16 gUnknown_03004200;
extern u16 gUnknown_03004240;
@@ -51,24 +91,146 @@ extern u16 gUnknown_030042C0;
extern u16 gUnknown_030042C4;
extern u16 gUnknown_03004AF0;
extern u16 gUnknown_03004B10[8];
-extern u16 gBattleAnimArgs[8];
+extern s16 gBattleAnimArgs[8];
extern struct MusicPlayerInfo gMPlay_BGM;
extern struct MusicPlayerInfo gMPlay_SE1;
extern struct MusicPlayerInfo gMPlay_SE2;
extern const u16 gUnknown_081C7160[];
-extern void (*gUnknown_0837F4B8[])(void);
extern const u8 *const gBattleAnims_Moves[];
extern const struct SpriteSheet gBattleAnimPicTable[];
extern const struct SpritePalette gBattleAnimPaletteTable[];
+extern const struct BattleAnimBackground gBattleAnimBackgroundTable[];
-extern u8 unk_2000000[];
-
-#define EWRAM_14800 ((u16 *)(unk_2000000 + 0x14800))
-#define EWRAM_17800 ((struct UnknownStruct1 *)(unk_2000000 + 0x17800))
-#define EWRAM_17810 ((struct UnknownStruct3 *)(unk_2000000 + 0x17810))
-#define EWRAM_18000 ((u16 *)(unk_2000000 + 0x18000))
-#define EWRAM_19348 (*(u16 *)(unk_2000000 + 0x19348))
+extern void sub_8079E24();
+extern void sub_8043EB4();
+extern u8 sub_8079E90();
+extern u8 sub_8077ABC();
+extern u8 sub_8078874(u8);
+extern void sub_8078914();
+extern u8 sub_80AEB1C();
+extern void sub_80E4EF8(int, int, int, int, u16, u8, int);
+extern void sub_800D238();
+extern u8 sub_80789BC();
+extern void sub_80AB2AC(void);
+extern void sub_800D7B8(void);
+extern u8 obj_id_for_side_relative_to_move();
+extern u8 battle_get_per_side_status_permutated();
+
+void move_something(const u8 *const moveAnims[], u16 b, u8 c);
+static void sub_80759D0(void);
+static void ScriptCmd_loadsprite(void);
+static void ScriptCmd_unloadsprite(void);
+static void ScriptCmd_sprite(void);
+static void ScriptCmd_createtask(void);
+static void ScriptCmd_delay(void);
+static void ScriptCmd_wait(void);
+static void ScriptCmd_hang1(void);
+static void ScriptCmd_hang2(void);
+static void ScriptCmd_end(void);
+static void ScriptCmd_playse(void);
+static void ScriptCmd_monbg(void);
+bool8 b_side_obj__get_some_boolean(u8 a);
+void sub_8076034(u8, u8);
+static void sub_8076380(void);
+static void task_pA_ma0A_obj_to_bg_pal(u8);
+static void ScriptCmd_clearmonbg(void);
+static void sub_807672C(u8);
+static void ScriptCmd_monbg_22(void);
+static void ScriptCmd_clearmonbg_23(void);
+static void sub_80769A4(u8);
+static void ScriptCmd_setalpha(void);
+static void ScriptCmd_setbldcnt(void);
+static void ScriptCmd_blendoff(void);
+static void ScriptCmd_call(void);
+static void ScriptCmd_return(void);
+static void ScriptCmd_setvar(void);
+static void ScriptCmd_ifelse(void);
+static void ScriptCmd_jumpif(void);
+static void ScriptCmd_jump(void);
+bool8 sub_8076BE0(void);
+static void ScriptCmd_fadetobg(void);
+static void ScriptCmd_fadetobg_25(void);
+static void task_p5_load_battle_screen_elements(u8);
+static void sub_8076DB8(u16);
+static void dp01t_11_3_message_for_player_only(void);
+static void ScriptCmd_restorebg(void);
+static void ScriptCmd_waitbgfadeout(void);
+static void ScriptCmd_waitbgfadein(void);
+static void ScriptCmd_changebg(void);
+static void ScriptCmd_panse_19(void);
+static void ScriptCmd_setpan(void);
+static void ScriptCmd_panse_1B(void);
+static void c3_08073CEC(u8);
+static void ScriptCmd_panse_26(void);
+static void ScriptCmd_panse_27(void);
+static void ScriptCmd_panse_1C(void);
+static void sub_80774FC(u8);
+static void ScriptCmd_panse_1D(void);
+static void sub_80775CC(u8);
+static void ScriptCmd_createtask_1F(void);
+static void ScriptCmd_waitsound(void);
+static void ScriptCmd_jumpvareq(void);
+static void ScriptCmd_jumpunkcond(void);
+static void ScriptCmd_monbgprio_28(void);
+static void ScriptCmd_monbgprio_29(void);
+static void ScriptCmd_monbgprio_2A(void);
+static void ScriptCmd_invisible(void);
+static void ScriptCmd_visible(void);
+static void ScriptCmd_doublebattle_2D(void);
+static void ScriptCmd_doublebattle_2E(void);
+static void ScriptCmd_stopsound(void);
+
+static void (*const sScriptCmdTable[])(void) = {
+ ScriptCmd_loadsprite,
+ ScriptCmd_unloadsprite,
+ ScriptCmd_sprite,
+ ScriptCmd_createtask,
+ ScriptCmd_delay,
+ ScriptCmd_wait,
+ ScriptCmd_hang1,
+ ScriptCmd_hang2,
+ ScriptCmd_end,
+ ScriptCmd_playse,
+ ScriptCmd_monbg,
+ ScriptCmd_clearmonbg,
+ ScriptCmd_setalpha,
+ ScriptCmd_blendoff,
+ ScriptCmd_call,
+ ScriptCmd_return,
+ ScriptCmd_setvar,
+ ScriptCmd_ifelse,
+ ScriptCmd_jumpif,
+ ScriptCmd_jump,
+ ScriptCmd_fadetobg,
+ ScriptCmd_restorebg,
+ ScriptCmd_waitbgfadeout,
+ ScriptCmd_waitbgfadein,
+ ScriptCmd_changebg,
+ ScriptCmd_panse_19,
+ ScriptCmd_setpan,
+ ScriptCmd_panse_1B,
+ ScriptCmd_panse_1C,
+ ScriptCmd_panse_1D,
+ ScriptCmd_setbldcnt,
+ ScriptCmd_createtask_1F,
+ ScriptCmd_waitsound,
+ ScriptCmd_jumpvareq,
+ ScriptCmd_monbg_22,
+ ScriptCmd_clearmonbg_23,
+ ScriptCmd_jumpunkcond,
+ ScriptCmd_fadetobg_25,
+ ScriptCmd_panse_26,
+ ScriptCmd_panse_27,
+ ScriptCmd_monbgprio_28,
+ ScriptCmd_monbgprio_29,
+ ScriptCmd_monbgprio_2A,
+ ScriptCmd_invisible,
+ ScriptCmd_visible,
+ ScriptCmd_doublebattle_2D,
+ ScriptCmd_doublebattle_2E,
+ ScriptCmd_stopsound,
+};
void sub_8075624(void)
{
@@ -96,8 +258,6 @@ void sub_8075624(void)
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;
@@ -105,11 +265,6 @@ void move_anim_start_t1(u16 a)
move_something(gBattleAnims_Moves, a, 1);
}
-extern u8 sub_8076BE0(void);
-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;
@@ -139,7 +294,7 @@ void move_something(const u8 *const moveAnims[], u16 b, u8 c)
gBattleAnimArgs[i] = 0;
gUnknown_0202F7C2[0] = 0xFF;
gUnknown_0202F7C2[1] = -1;
- gUnknown_0202F7A4 = moveAnims[b];
+ gBattleAnimScriptPtr = moveAnims[b];
gUnknown_0202F7B1 = 1;
gUnknown_0202F7B0 = 0;
gUnknown_0202F7AC = sub_80759D0;
@@ -147,17 +302,13 @@ void move_something(const u8 *const moveAnims[], u16 b, u8 c)
gUnknown_03004B10[i] |= 0xFFFF;
if (c != 0)
{
- i = 0;
- while (1)
+ for (i = 0; gUnknown_081C7160[i] != 0xFFFF; i++)
{
- if (gUnknown_081C7160[i] == 0xFFFF)
- break;
if (b == gUnknown_081C7160[i])
{
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128);
break;
}
- i++;
}
}
gUnknown_030042C4 = 0;
@@ -185,7 +336,7 @@ void move_anim_related_task_del(u8 taskId)
gUnknown_0202F7B3--;
}
-void sub_8075940(u16 a)
+static void sub_8075940(u16 a)
{
s32 i;
@@ -199,7 +350,7 @@ void sub_8075940(u16 a)
}
}
-void sub_8075970(u16 a)
+static void sub_8075970(u16 a)
{
s32 i;
@@ -213,7 +364,7 @@ void sub_8075970(u16 a)
}
}
-void move_anim_waiter(void)
+static void move_anim_waiter(void)
{
if (gUnknown_0202F7B0 <= 0)
{
@@ -226,46 +377,42 @@ void move_anim_waiter(void)
}
}
-void sub_80759D0(void)
+static void sub_80759D0(void)
{
do
{
- gUnknown_0837F4B8[*gUnknown_0202F7A4]();
+ sScriptCmdTable[SCRIPT_READ_8(gBattleAnimScriptPtr)]();
} while (gUnknown_0202F7B0 == 0 && gUnknown_0202F7B1 != 0);
}
-void ma00_load_graphics(void)
+static void ScriptCmd_loadsprite(void)
{
- u32 r4;
+ u16 r4;
- //TODO: Clean this up
- gUnknown_0202F7A4++;
- r4 = gUnknown_0202F7A4[0] | (gUnknown_0202F7A4[1] << 8);
+ gBattleAnimScriptPtr++;
+ r4 = SCRIPT_READ_16(gBattleAnimScriptPtr);
LoadCompressedObjectPic(&gBattleAnimPicTable[r4 - 10000]);
LoadCompressedObjectPalette(&gBattleAnimPaletteTable[r4 - 10000]);
- gUnknown_0202F7A4 += 2;
+ gBattleAnimScriptPtr += 2;
sub_8075940(r4 - 10000);
gUnknown_0202F7B0 = 1;
gUnknown_0202F7AC = move_anim_waiter;
}
-void ma01_080728D0(void)
+static void ScriptCmd_unloadsprite(void)
{
- u32 r4;
+ u16 r4;
- gUnknown_0202F7A4++;
- r4 = gUnknown_0202F7A4[0] | (gUnknown_0202F7A4[1] << 8);
+ gBattleAnimScriptPtr++;
+ r4 = SCRIPT_READ_16(gBattleAnimScriptPtr);
FreeSpriteTilesByTag(gBattleAnimPicTable[r4 - 10000].tag);
FreeSpritePaletteByTag(gBattleAnimPicTable[r4 - 10000].tag);
- gUnknown_0202F7A4 += 2;
+ gBattleAnimScriptPtr += 2;
sub_8075970(r4 - 10000);
}
-extern u8 sub_8079E90();
-extern u8 sub_8077ABC();
-
#ifdef NONMATCHING
-void ma02_instanciate_template(void)
+static void ScriptCmd_sprite(void)
{
s32 i;
struct SpriteTemplate *r7;
@@ -276,17 +423,17 @@ void ma02_instanciate_template(void)
u8 r2;
s8 r1;
- gUnknown_0202F7A4++;
- r7 = (struct SpriteTemplate *)(gUnknown_0202F7A4[0] + (gUnknown_0202F7A4[1] << 8) + (gUnknown_0202F7A4[2] << 16) + (gUnknown_0202F7A4[3] << 24));
- gUnknown_0202F7A4 += 4;
- r4 = *gUnknown_0202F7A4;
- gUnknown_0202F7A4++;
- r0 = *gUnknown_0202F7A4;
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
+ r7 = (struct SpriteTemplate *)(SCRIPT_READ_32(gBattleAnimScriptPtr));
+ gBattleAnimScriptPtr += 4;
+ r4 = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
for (i = 0; i < r0; i++)
{
- gBattleAnimArgs[i] = gUnknown_0202F7A4[0] | (gUnknown_0202F7A4[1] << 8);
- gUnknown_0202F7A4 += 2;
+ gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr += 2;
}
if (r4 & 0x80)
{
@@ -320,11 +467,11 @@ void ma02_instanciate_template(void)
}
#else
__attribute__((naked))
-void ma02_instanciate_template(void)
+static void ScriptCmd_sprite(void)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
- ldr r5, _08075B2C @ =gUnknown_0202F7A4\n\
+ ldr r5, _08075B2C @ =gBattleAnimScriptPtr\n\
ldr r1, [r5]\n\
adds r3, r1, 0x1\n\
str r3, [r5]\n\
@@ -377,7 +524,7 @@ _08075B14:\n\
subs r0, 0x40\n\
b _08075B36\n\
.align 2, 0\n\
-_08075B2C: .4byte gUnknown_0202F7A4\n\
+_08075B2C: .4byte gBattleAnimScriptPtr\n\
_08075B30: .4byte gBattleAnimArgs\n\
_08075B34:\n\
negs r0, r4\n\
@@ -449,46 +596,46 @@ _08075BB4: .4byte gUnknown_0202F7B2\n\
}
#endif
-void sub_8075BB8(void)
+static void ScriptCmd_createtask(void)
{
TaskFunc taskFunc;
u8 taskPriority;
u8 taskId;
- u8 r0;
+ u8 numArgs;
s32 i;
- gUnknown_0202F7A4++;
- taskFunc = (TaskFunc)(gUnknown_0202F7A4[0] + (gUnknown_0202F7A4[1] << 8) + (gUnknown_0202F7A4[2] << 16) + (gUnknown_0202F7A4[3] << 24));
- gUnknown_0202F7A4 += 4;
- taskPriority = *gUnknown_0202F7A4;
- gUnknown_0202F7A4++;
- r0 = *gUnknown_0202F7A4;
- gUnknown_0202F7A4++;
- for (i = 0; i < r0; i++)
+ gBattleAnimScriptPtr++;
+ taskFunc = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr += 4;
+ taskPriority = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
+ numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
+ for (i = 0; i < numArgs; i++)
{
- gBattleAnimArgs[i] = gUnknown_0202F7A4[0] | (gUnknown_0202F7A4[1] << 8);
- gUnknown_0202F7A4 += 2;
+ gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr += 2;
}
taskId = CreateTask(taskFunc, taskPriority);
taskFunc(taskId);
gUnknown_0202F7B2++;
}
-void ma04_wait_countdown(void)
+static void ScriptCmd_delay(void)
{
- gUnknown_0202F7A4++;
- gUnknown_0202F7B0 = *gUnknown_0202F7A4;
+ gBattleAnimScriptPtr++;
+ gUnknown_0202F7B0 = SCRIPT_READ_8(gBattleAnimScriptPtr);
if (gUnknown_0202F7B0 == 0)
gUnknown_0202F7B0 = -1;
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
gUnknown_0202F7AC = move_anim_waiter;
}
-void sub_8075C74(void)
+static void ScriptCmd_wait(void)
{
if (gUnknown_0202F7B2 == 0)
{
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
gUnknown_0202F7B0 = 0;
}
else
@@ -497,15 +644,15 @@ void sub_8075C74(void)
}
}
-void nullsub_53(void)
+static void ScriptCmd_hang1(void)
{
}
-void nullsub_88(void)
+static void ScriptCmd_hang2(void)
{
}
-void sub_8075CB0(void)
+static void ScriptCmd_end(void)
{
s32 i;
int zero = 0;
@@ -554,18 +701,14 @@ void sub_8075CB0(void)
}
}
-void ma09_play_sound(void)
+static void ScriptCmd_playse(void)
{
- gUnknown_0202F7A4++;
- PlaySE(gUnknown_0202F7A4[0] | (gUnknown_0202F7A4[1] << 8));
- gUnknown_0202F7A4 += 2;
+ gBattleAnimScriptPtr++;
+ PlaySE(SCRIPT_READ_16(gBattleAnimScriptPtr));
+ gBattleAnimScriptPtr += 2;
}
-extern void task_pA_ma0A_obj_to_bg_pal(u8);
-extern bool8 b_side_obj__get_some_boolean(u8);
-extern void sub_8076034(u8, u8);
-
-void sub_8075DE0(void)
+static void ScriptCmd_monbg(void)
{
u8 r6;
u8 r5;
@@ -574,8 +717,8 @@ void sub_8075DE0(void)
u16 r4;
u8 taskId;
- gUnknown_0202F7A4++;
- r6 = *gUnknown_0202F7A4;
+ gBattleAnimScriptPtr++;
+ r6 = SCRIPT_READ_8(gBattleAnimScriptPtr);
if (r6 == 0)
r6 = 2;
else if (r6 == 1)
@@ -642,11 +785,9 @@ void sub_8075DE0(void)
gTasks[taskId].data[6] = r5;
gUnknown_0202F7C2[1] = taskId;
}
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
}
-extern u8 sub_8078874(u8);
-
#ifdef NONMATCHING
bool8 b_side_obj__get_some_boolean(u8 a)
{
@@ -735,30 +876,6 @@ _0807602E:\n\
}
#endif
-struct UnknownStruct2
-{
- void *unk0;
- u16 *unk4;
- u8 unk8;
-};
-
-struct BGCntrlBitfield
-{
- volatile u16 priority:2;
- volatile u16 charBaseBlock:2;
- volatile u16 field_0_2:4;
- volatile u16 field_1_0:5;
- volatile u16 areaOverflowMode:1;
- volatile u16 screenSize:2;
-};
-
-#define REG_BGCNT_BITFIELD(n) (*(struct BGCntrlBitfield *)REG_ADDR_BG##n##CNT)
-
-extern void sub_8078914();
-extern u8 sub_80AEB1C();
-extern void sub_8076380(void);
-extern void sub_80E4EF8(int, int, int, int, u16, u8, int);
-
void sub_8076034(u8 a, u8 b)
{
volatile u8 pointlessZero;
@@ -792,9 +909,9 @@ void sub_8076034(u8 a, u8 b)
addr2 = (void *)s.unk4;
DmaFill16(3, 0xFF, addr2, 0x1000);
- REG_BGCNT_BITFIELD(1).priority = 2;
- REG_BGCNT_BITFIELD(1).screenSize = 1;
- REG_BGCNT_BITFIELD(1).areaOverflowMode = 0;
+ REG_BG1CNT_BITFIELD.priority = 2;
+ REG_BG1CNT_BITFIELD.screenSize = 1;
+ REG_BG1CNT_BITFIELD.areaOverflowMode = 0;
spriteId = gUnknown_02024BE0[a];
gUnknown_030042C0 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32;
@@ -814,7 +931,7 @@ void sub_8076034(u8 a, u8 b)
r2 = 0;
else
r2 = battle_get_per_side_status(a);
- sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BGCNT_BITFIELD(1).charBaseBlock);
+ sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock);
if (sub_8076BE0() != 0)
sub_8076380();
}
@@ -842,9 +959,9 @@ void sub_8076034(u8 a, u8 b)
addr2 = (void *)(VRAM + 0xF000);
DmaFill32(3, 0, addr2, 0x800);
- REG_BGCNT_BITFIELD(2).priority = 2;
- REG_BGCNT_BITFIELD(2).screenSize = 1;
- REG_BGCNT_BITFIELD(2).areaOverflowMode = 0;
+ REG_BG2CNT_BITFIELD.priority = 2;
+ REG_BG2CNT_BITFIELD.screenSize = 1;
+ REG_BG2CNT_BITFIELD.areaOverflowMode = 0;
spriteId = gUnknown_02024BE0[a];
gUnknown_03004288 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32;
@@ -858,11 +975,11 @@ void sub_8076034(u8 a, u8 b)
addr3 = (void *)(PLTT + 0x120);
DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32);
- sub_80E4EF8(0, 0, battle_get_per_side_status(a), 9, 0x6000, 0x1E, REG_BGCNT_BITFIELD(2).charBaseBlock);
+ sub_80E4EF8(0, 0, battle_get_per_side_status(a), 9, 0x6000, 0x1E, REG_BG2CNT_BITFIELD.charBaseBlock);
}
}
-void sub_8076380(void)
+static void sub_8076380(void)
{
int i;
int j;
@@ -967,7 +1084,7 @@ void sub_8076464(u8 a)
}
}
-void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
+static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
{
u8 r4;
u8 r6;
@@ -1004,16 +1121,14 @@ void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
}
}
-extern void sub_807672C(u8);
-
-void ma0B_0807324C(void)
+static void ScriptCmd_clearmonbg(void)
{
u8 r4;
u8 r5;
u8 taskId;
- gUnknown_0202F7A4++;
- r4 = *gUnknown_0202F7A4;
+ gBattleAnimScriptPtr++;
+ r4 = SCRIPT_READ_8(gBattleAnimScriptPtr);
if (r4 == 0)
r4 = 2;
else if (r4 == 1)
@@ -1031,10 +1146,10 @@ void ma0B_0807324C(void)
taskId = CreateTask(sub_807672C, 5);
gTasks[taskId].data[0] = r4;
gTasks[taskId].data[2] = r5;
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
}
-void sub_807672C(u8 taskId)
+static void sub_807672C(u8 taskId)
{
u8 var;
u8 r4;
@@ -1064,15 +1179,15 @@ void sub_807672C(u8 taskId)
}
}
-void sub_80767C4(void)
+static void ScriptCmd_monbg_22(void)
{
u8 r5;
u8 r4;
u8 r0;
u8 r1;
- gUnknown_0202F7A4++;
- r5 = *gUnknown_0202F7A4;
+ gBattleAnimScriptPtr++;
+ r5 = SCRIPT_READ_8(gBattleAnimScriptPtr);
if (r5 == 0)
r5 = 2;
else if (r5 == 1)
@@ -1104,19 +1219,17 @@ void sub_80767C4(void)
sub_8076034(r4, r1);
gSprites[gUnknown_02024BE0[r4]].invisible = FALSE;
}
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
}
-extern void sub_80769A4(u8);
-
-void ma23_8073484(void)
+static void ScriptCmd_clearmonbg_23(void)
{
u8 r5;
u8 r6;
u8 taskId;
- gUnknown_0202F7A4++;
- r5 = *gUnknown_0202F7A4;
+ gBattleAnimScriptPtr++;
+ r5 = SCRIPT_READ_8(gBattleAnimScriptPtr);
if (r5 == 0)
r5 = 2;
else if (r5 == 1)
@@ -1134,10 +1247,10 @@ void ma23_8073484(void)
taskId = CreateTask(sub_80769A4, 5);
gTasks[taskId].data[0] = r5;
gTasks[taskId].data[2] = r6;
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
}
-void sub_80769A4(u8 taskId)
+static void sub_80769A4(u8 taskId)
{
u8 r0;
u8 r4;
@@ -1161,107 +1274,106 @@ void sub_80769A4(u8 taskId)
}
}
-void sub_8076A3C(void)
+static void ScriptCmd_setalpha(void)
{
u16 r3;
u16 r1;
- gUnknown_0202F7A4++;
- r3 = *(gUnknown_0202F7A4++);
- r1 = *(gUnknown_0202F7A4++) << 8;
+ gBattleAnimScriptPtr++;
+ r3 = *(gBattleAnimScriptPtr++);
+ r1 = *(gBattleAnimScriptPtr++) << 8;
REG_BLDCNT = 0x3F40;
REG_BLDALPHA = r3 | r1;
}
-void sub_8076A78(void)
+static void ScriptCmd_setbldcnt(void)
{
u16 r3;
u16 r1;
- gUnknown_0202F7A4++;
- r3 = *(gUnknown_0202F7A4++);
- r1 = *(gUnknown_0202F7A4++) << 8;
+ gBattleAnimScriptPtr++;
+ r3 = *(gBattleAnimScriptPtr++);
+ r1 = *(gBattleAnimScriptPtr++) << 8;
REG_BLDCNT = r3 | r1;
}
-void sub_8076AA0(void)
+static void ScriptCmd_blendoff(void)
{
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
REG_BLDCNT = 0;
REG_BLDALPHA = 0;
}
-void ma0E_call(void)
+static void ScriptCmd_call(void)
{
u32 addr;
- gUnknown_0202F7A4++;
- gUnknown_0202F7A8 = gUnknown_0202F7A4 + 4; //store return address
- addr = gUnknown_0202F7A4[0] + (gUnknown_0202F7A4[1] << 8) + (gUnknown_0202F7A4[2] << 16) + (gUnknown_0202F7A4[3] << 24);
- gUnknown_0202F7A4 = (u8 *)addr;
+ gBattleAnimScriptPtr++;
+ gBattleAnimScriptRetAddr = gBattleAnimScriptPtr + 4;
+ addr = SCRIPT_READ_32(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr = (u8 *)addr;
}
-//script return
-void sub_8076AF0(void)
+static void ScriptCmd_return(void)
{
- gUnknown_0202F7A4 = gUnknown_0202F7A8;
+ gBattleAnimScriptPtr = gBattleAnimScriptRetAddr;
}
-void ma10_080736AC(void)
+static void ScriptCmd_setvar(void)
{
- const u8 *addr = gUnknown_0202F7A4;
+ const u8 *addr = gBattleAnimScriptPtr;
u16 r4;
u8 r2;
- gUnknown_0202F7A4++;
- r2 = *(gUnknown_0202F7A4++);
- r4 = gUnknown_0202F7A4[0] | (gUnknown_0202F7A4[1] << 8);
- gUnknown_0202F7A4 = addr + 4;
+ gBattleAnimScriptPtr++;
+ r2 = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
+ r4 = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr = addr + 4;
gBattleAnimArgs[r2] = r4;
}
-void ma11_if_else(void)
+static void ScriptCmd_ifelse(void)
{
u32 addr;
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
if (gUnknown_0202F7C4 & 1)
- gUnknown_0202F7A4 += 4;
- addr = gUnknown_0202F7A4[0] + (gUnknown_0202F7A4[1] << 8) + (gUnknown_0202F7A4[2] << 16) + (gUnknown_0202F7A4[3] << 24);
- gUnknown_0202F7A4 = (u8 *)addr;
+ gBattleAnimScriptPtr += 4;
+ addr = SCRIPT_READ_32(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr = (u8 *)addr;
}
-void ma12_cond_if(void)
+static void ScriptCmd_jumpif(void)
{
- const u8 *r4 = gUnknown_0202F7A4;
u8 r1;
u32 addr;
- gUnknown_0202F7A4++;
- r1 = *gUnknown_0202F7A4;
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
+ r1 = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
if (r1 == gUnknown_0202F7C4)
{
- addr = gUnknown_0202F7A4[0] + (gUnknown_0202F7A4[1] << 8) + (gUnknown_0202F7A4[2] << 16) + (gUnknown_0202F7A4[3] << 24);
- gUnknown_0202F7A4 = (u8 *)addr;
+ addr = SCRIPT_READ_32(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr = (u8 *)addr;
}
else
{
- gUnknown_0202F7A4 = r4 + 6;
+ gBattleAnimScriptPtr += 4;
}
}
-//script goto
-void sub_8076BBC(void)
+static void ScriptCmd_jump(void)
{
u32 addr;
- gUnknown_0202F7A4++;
- addr = gUnknown_0202F7A4[0] + (gUnknown_0202F7A4[1] << 8) + (gUnknown_0202F7A4[2] << 16) + (gUnknown_0202F7A4[3] << 24);
- gUnknown_0202F7A4 = (u8 *)addr;
+ gBattleAnimScriptPtr++;
+ addr = SCRIPT_READ_32(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr = (u8 *)addr;
}
-u8 sub_8076BE0(void)
+//IsContest, maybe
+bool8 sub_8076BE0(void)
{
if (!gMain.inBattle)
return TRUE;
@@ -1269,32 +1381,31 @@ u8 sub_8076BE0(void)
return FALSE;
}
-extern void task_p5_load_battle_screen_elements(u8);
-
-void ma14_load_background(void)
+static void ScriptCmd_fadetobg(void)
{
u8 r4;
u8 taskId;
- gUnknown_0202F7A4++;
- r4 = *(gUnknown_0202F7A4++);
+ gBattleAnimScriptPtr++;
+ r4 = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
taskId = CreateTask(task_p5_load_battle_screen_elements, 5);
gTasks[taskId].data[0] = r4;
gUnknown_0202F7C5 = 1;
}
-void sub_8076C4C(void)
+static void ScriptCmd_fadetobg_25(void)
{
u8 r8;
u8 r7;
u8 r6;
u8 taskId;
- gUnknown_0202F7A4++;
- r8 = gUnknown_0202F7A4[0];
- r7 = gUnknown_0202F7A4[1];
- r6 = gUnknown_0202F7A4[2];
- gUnknown_0202F7A4 += 3;
+ gBattleAnimScriptPtr++;
+ r8 = gBattleAnimScriptPtr[0];
+ r7 = gBattleAnimScriptPtr[1];
+ r6 = gBattleAnimScriptPtr[2];
+ gBattleAnimScriptPtr += 3;
taskId = CreateTask(task_p5_load_battle_screen_elements, 5);
if (sub_8076BE0() != 0)
gTasks[taskId].data[0] = r6;
@@ -1305,10 +1416,7 @@ void sub_8076C4C(void)
gUnknown_0202F7C5 = 1;
}
-extern void sub_8076DB8(u16);
-extern void dp01t_11_3_message_for_player_only(void);
-
-void task_p5_load_battle_screen_elements(u8 taskId)
+static void task_p5_load_battle_screen_elements(u8 taskId)
{
if (gTasks[taskId].data[10] == 0)
{
@@ -1344,19 +1452,7 @@ void task_p5_load_battle_screen_elements(u8 taskId)
}
}
-struct BattleAnimBackground
-{
- void *image;
- void *palette;
- void *tilemap;
-};
-
-extern const struct BattleAnimBackground gBattleAnimBackgroundTable[];
-
-extern void sub_800D238();
-extern u8 sub_80789BC();
-
-void sub_8076DB8(u16 a)
+static void sub_8076DB8(u16 a)
{
if (sub_8076BE0())
{
@@ -1380,10 +1476,7 @@ void sub_8076DB8(u16 a)
}
}
-extern void sub_80AB2AC(void);
-extern void sub_800D7B8(void);
-
-void dp01t_11_3_message_for_player_only(void)
+static void dp01t_11_3_message_for_player_only(void)
{
if (sub_8076BE0())
sub_80AB2AC();
@@ -1391,21 +1484,21 @@ void dp01t_11_3_message_for_player_only(void)
sub_800D7B8();
}
-void ma15_load_battle_screen_elements(void)
+static void ScriptCmd_restorebg(void)
{
u8 taskId;
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
taskId = CreateTask(task_p5_load_battle_screen_elements, 5);
gTasks[taskId].data[0] = 0xFFFF;
gUnknown_0202F7C5 = 1;
}
-void ma16_wait_for_battle_screen_elements_s2(void)
+static void ScriptCmd_waitbgfadeout(void)
{
if (gUnknown_0202F7C5 == 2)
{
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
gUnknown_0202F7B0 = 0;
}
else
@@ -1414,11 +1507,11 @@ void ma16_wait_for_battle_screen_elements_s2(void)
}
}
-void sub_8076F44(void)
+static void ScriptCmd_waitbgfadein(void)
{
if (gUnknown_0202F7C5 == 0)
{
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
gUnknown_0202F7B0 = 0;
}
else
@@ -1427,25 +1520,790 @@ void sub_8076F44(void)
}
}
-void ma18_load_background_probably(void)
+static void ScriptCmd_changebg(void)
{
- gUnknown_0202F7A4++;
- sub_8076DB8(*gUnknown_0202F7A4);
- gUnknown_0202F7A4++;
+ gBattleAnimScriptPtr++;
+ sub_8076DB8(SCRIPT_READ_8(gBattleAnimScriptPtr));
+ gBattleAnimScriptPtr++;
}
+//Weird control flow
/*
-void sub_8076F98(u8 a)
+s8 sub_8076F98(s8 a)
{
if (!sub_8076BE0() && (EWRAM_17810[gUnknown_0202F7C8].unk0 & 0x10))
{
- battle_side_get_owner(gUnknown_0202F7C8);
+ a = battle_side_get_owner(gUnknown_0202F7C8) ? 0xC0 : 0x3F;
}
//_08076FDC
else
{
-
+ if (sub_8076BE0())
+ {
+ if (gUnknown_0202F7C8 == gUnknown_0202F7C9 && gUnknown_0202F7C8 == 2
+ && a == 0x3F)
+ {
+ //jump to _0807707A
+ if (a < -0x40)
+ a = 0xC0;
+ return a;
+ }
+ }
+ //_08077004
+ else
+ {
+ if (battle_side_get_owner(gUnknown_0202F7C8) == 0)
+ {
+ if (battle_side_get_owner(gUnknown_0202F7C9) == 0)
+ }
+ //_08077042
+ else
+ {
+
+ }
+ //_0807706C
+ }
}
//_0807706E
}
*/
+__attribute__((naked))
+s8 sub_8076F98(s8 a)
+{
+ asm(".syntax unified\n\
+ push {r4,lr}\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ bl sub_8076BE0\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08076FDC\n\
+ ldr r0, _08076FD4 @ =gUnknown_0202F7C8\n\
+ ldrb r2, [r0]\n\
+ lsls r0, r2, 1\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ ldr r1, _08076FD8 @ =0x02017810\n\
+ adds r0, r1\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08076FDC\n\
+ adds r0, r2, 0\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ movs r4, 0xC0\n\
+ cmp r0, 0\n\
+ beq _0807706E\n\
+ movs r4, 0x3F\n\
+ b _0807706E\n\
+ .align 2, 0\n\
+_08076FD4: .4byte gUnknown_0202F7C8\n\
+_08076FD8: .4byte 0x02017810\n\
+_08076FDC:\n\
+ bl sub_8076BE0\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _08077004\n\
+ ldr r0, _08076FFC @ =gUnknown_0202F7C8\n\
+ ldr r1, _08077000 @ =gUnknown_0202F7C9\n\
+ ldrb r0, [r0]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bne _08077068\n\
+ cmp r0, 0x2\n\
+ bne _08077068\n\
+ cmp r4, 0x3F\n\
+ beq _0807707A\n\
+ b _08077068\n\
+ .align 2, 0\n\
+_08076FFC: .4byte gUnknown_0202F7C8\n\
+_08077000: .4byte gUnknown_0202F7C9\n\
+_08077004:\n\
+ ldr r0, _0807702C @ =gUnknown_0202F7C8\n\
+ ldrb r0, [r0]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08077042\n\
+ ldr r0, _08077030 @ =gUnknown_0202F7C9\n\
+ ldrb r0, [r0]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0807706E\n\
+ lsls r0, r4, 24\n\
+ asrs r1, r0, 24\n\
+ cmp r1, 0x3F\n\
+ bne _08077034\n\
+ movs r4, 0xC0\n\
+ b _0807706E\n\
+ .align 2, 0\n\
+_0807702C: .4byte gUnknown_0202F7C8\n\
+_08077030: .4byte gUnknown_0202F7C9\n\
+_08077034:\n\
+ movs r0, 0x40\n\
+ negs r0, r0\n\
+ cmp r1, r0\n\
+ beq _0807706E\n\
+ negs r0, r1\n\
+ lsls r0, 24\n\
+ b _0807706C\n\
+_08077042:\n\
+ ldr r0, _08077064 @ =gUnknown_0202F7C9\n\
+ ldrb r0, [r0]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _08077068\n\
+ lsls r0, r4, 24\n\
+ asrs r0, 24\n\
+ movs r1, 0x40\n\
+ negs r1, r1\n\
+ cmp r0, r1\n\
+ bne _0807706E\n\
+ movs r4, 0x3F\n\
+ b _0807706E\n\
+ .align 2, 0\n\
+_08077064: .4byte gUnknown_0202F7C9\n\
+_08077068:\n\
+ lsls r0, r4, 24\n\
+ negs r0, r0\n\
+_0807706C:\n\
+ lsrs r4, r0, 24\n\
+_0807706E:\n\
+ lsls r0, r4, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3F\n\
+ ble _0807707A\n\
+ movs r4, 0x3F\n\
+ b _08077088\n\
+_0807707A:\n\
+ lsls r0, r4, 24\n\
+ asrs r0, 24\n\
+ movs r1, 0x40\n\
+ negs r1, r1\n\
+ cmp r0, r1\n\
+ bge _08077088\n\
+ movs r4, 0xC0\n\
+_08077088:\n\
+ lsls r0, r4, 24\n\
+ asrs r0, 24\n\
+ pop {r4}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+
+s8 sub_8077094(s8 a)
+{
+ if (!sub_8076BE0() && (EWRAM_17810[gUnknown_0202F7C8].unk0 & 0x10))
+ {
+ if (battle_side_get_owner(gUnknown_0202F7C8) != 0)
+ a = 0x3F;
+ else
+ a = 0xC0;
+ }
+ else
+ {
+ if (battle_side_get_owner(gUnknown_0202F7C8) != 0 || sub_8076BE0() != 0)
+ a = -a;
+ }
+ return a;
+}
+
+s16 sub_8077104(s16 a)
+{
+ s16 var = a;
+
+ if (var > 63)
+ var = 63;
+ else if (var < -64)
+ var = -64;
+ return var;
+}
+
+s16 sub_807712C(s16 a, s16 b, s16 c)
+{
+ u16 var;
+
+ if (a < b)
+ var = ((c < 0) ? -c : c);
+ else if (a > b)
+ var = -((c < 0) ? -c : c);
+ else
+ var = 0;
+ return var;
+}
+
+static void ScriptCmd_panse_19(void)
+{
+ u16 r4;
+ s8 r0;
+
+ gBattleAnimScriptPtr++;
+ r4 = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2);
+ PlaySE12WithPanning(r4, sub_8076F98(r0));
+ gBattleAnimScriptPtr += 3;
+}
+
+static void ScriptCmd_setpan(void)
+{
+ s8 r0;
+
+ gBattleAnimScriptPtr++;
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ SE12PanpotControl(sub_8076F98(r0));
+ gBattleAnimScriptPtr++;
+}
+
+static void ScriptCmd_panse_1B(void)
+{
+ u16 songNum;
+ s8 r0;
+ s8 r4;
+ s8 r6;
+ u8 r7;
+ s8 panning;
+ s8 r8;
+ u8 taskId;
+
+ gBattleAnimScriptPtr++;
+ songNum = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2);
+ r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3);
+ r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4);
+ r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5);
+ panning = sub_8076F98(r0);
+ r8 = sub_8076F98(r4);
+ r4 = sub_807712C(panning, r8, r6);
+ taskId = CreateTask(c3_08073CEC, 1);
+ gTasks[taskId].data[0] = panning;
+ gTasks[taskId].data[1] = r8;
+ gTasks[taskId].data[2] = r4;
+ gTasks[taskId].data[3] = r7;
+ gTasks[taskId].data[4] = panning;
+ PlaySE12WithPanning(songNum, panning);
+ gUnknown_0202F7B3++;
+ gBattleAnimScriptPtr += 6;
+}
+
+#ifdef NONMATCHING
+static void c3_08073CEC(u8 taskId)
+{
+ u16 r7 = 0;
+ s16 r0;
+ s16 r6;
+ s16 r3;
+ s16 r4;
+ int foo;
+
+ r0 = gTasks[taskId].data[8];
+ gTasks[taskId].data[8]++;
+ if (r0 >= gTasks[taskId].data[3])
+ {
+ gTasks[taskId].data[8] = r7;
+ r6 = gTasks[taskId].data[0];
+ r3 = gTasks[taskId].data[1];
+ foo = gTasks[taskId].data[4] + gTasks[taskId].data[2];
+ r4 = foo;
+ gTasks[taskId].data[4] = r4;
+ if (gTasks[taskId].data[2] == 0)
+ {
+ r4 = r3;
+ DestroyTask(taskId);
+ gUnknown_0202F7B3--;
+ }
+ //_080772D8
+ else
+ {
+ if (r6 < r3)
+ {
+ if (r4 < r3)
+ goto check;
+ DestroyTask(taskId);
+ gUnknown_0202F7B3--;
+ }
+ else
+ {
+ if (r4 <= r3)
+ r7 = 1;
+ check:
+ if (r7 != 0)
+ {
+ DestroyTask(taskId);
+ gUnknown_0202F7B3--;
+ }
+ }
+ }
+ //_080772F8
+ SE12PanpotControl(r4);
+ }
+ //_08077314
+}
+#else
+__attribute__((naked))
+static void c3_08073CEC(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r7, 0\n\
+ ldr r1, _080772D4 @ =gTasks\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r2, r0, r1\n\
+ ldrh r0, [r2, 0x18]\n\
+ adds r1, r0, 0x1\n\
+ strh r1, [r2, 0x18]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ movs r3, 0xE\n\
+ ldrsh r1, [r2, r3]\n\
+ cmp r0, r1\n\
+ blt _08077314\n\
+ strh r7, [r2, 0x18]\n\
+ ldrh r6, [r2, 0x8]\n\
+ ldrh r3, [r2, 0xA]\n\
+ movs r4, 0x10\n\
+ ldrsh r0, [r2, r4]\n\
+ movs r4, 0xC\n\
+ ldrsh r1, [r2, r4]\n\
+ adds r0, r1\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ strh r4, [r2, 0x10]\n\
+ cmp r1, 0\n\
+ bne _080772D8\n\
+ lsls r2, r3, 16\n\
+ b _080772FC\n\
+ .align 2, 0\n\
+_080772D4: .4byte gTasks\n\
+_080772D8:\n\
+ lsls r1, r6, 16\n\
+ lsls r0, r3, 16\n\
+ asrs r3, r0, 16\n\
+ adds r2, r0, 0\n\
+ cmp r1, r2\n\
+ bge _080772EE\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ cmp r0, r3\n\
+ blt _080772F8\n\
+ b _080772FC\n\
+_080772EE:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ cmp r0, r3\n\
+ bgt _080772F8\n\
+ movs r7, 0x1\n\
+_080772F8:\n\
+ cmp r7, 0\n\
+ beq _0807730C\n\
+_080772FC:\n\
+ lsrs r4, r2, 16\n\
+ adds r0, r5, 0\n\
+ bl DestroyTask\n\
+ ldr r1, _0807731C @ =gUnknown_0202F7B3\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0x1\n\
+ strb r0, [r1]\n\
+_0807730C:\n\
+ lsls r0, r4, 24\n\
+ asrs r0, 24\n\
+ bl SE12PanpotControl\n\
+_08077314:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0807731C: .4byte gUnknown_0202F7B3\n\
+ .syntax divided\n");
+}
+#endif
+
+static void ScriptCmd_panse_26(void)
+{
+ u16 r8;
+ s8 r4;
+ s8 r5;
+ s8 r6;
+ u8 r10;
+ u8 taskId;
+
+ gBattleAnimScriptPtr++;
+ r8 = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2);
+ r5 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3);
+ r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4);
+ r10 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5);
+ taskId = CreateTask(c3_08073CEC, 1);
+ gTasks[taskId].data[0] = r4;
+ gTasks[taskId].data[1] = r5;
+ gTasks[taskId].data[2] = r6;
+ gTasks[taskId].data[3] = r10;
+ gTasks[taskId].data[4] = r4;
+ PlaySE12WithPanning(r8, r4);
+ gUnknown_0202F7B3++;
+ gBattleAnimScriptPtr += 6;
+}
+
+static void ScriptCmd_panse_27(void)
+{
+ u16 r9;
+ u8 r4;
+ u8 r8;
+ u8 r7;
+ u8 r0;
+ s8 r6;
+ s8 r5;
+ s8 r4_2;
+ u8 taskId;
+
+ gBattleAnimScriptPtr++;
+ r9 = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2);
+ r4 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3);
+ r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4);
+ r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 5);
+ r6 = sub_8077094(r0);
+ r5 = sub_8077094(r4);
+ r4_2 = sub_8077094(r8);
+ taskId = CreateTask(c3_08073CEC, 1);
+ gTasks[taskId].data[0] = r6;
+ gTasks[taskId].data[1] = r5;
+ gTasks[taskId].data[2] = r4_2;
+ gTasks[taskId].data[3] = r7;
+ gTasks[taskId].data[4] = r6;
+ PlaySE12WithPanning(r9, r6);
+ gUnknown_0202F7B3++;
+ gBattleAnimScriptPtr += 6;
+}
+
+static void ScriptCmd_panse_1C(void)
+{
+ u16 r5;
+ u8 r0;
+ u8 r8;
+ u8 r9;
+ s8 r4;
+ u8 taskId;
+
+ gBattleAnimScriptPtr++;
+ r5 = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2);
+ r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3);
+ r9 = SCRIPT_READ_8(gBattleAnimScriptPtr + 4);
+ r4 = sub_8076F98(r0);
+ taskId = CreateTask(sub_80774FC, 1);
+ gTasks[taskId].data[0] = r5;
+ gTasks[taskId].data[1] = r4;
+ gTasks[taskId].data[2] = r8;
+ gTasks[taskId].data[3] = r9;
+ gTasks[taskId].data[8] = r8;
+ gTasks[taskId].func(taskId);
+ gUnknown_0202F7B3++;
+ gBattleAnimScriptPtr += 5;
+}
+
+static void sub_80774FC(u8 taskId)
+{
+ s16 data8;
+ u16 r0;
+ s8 r1;
+ u8 r4;
+
+ data8 = gTasks[taskId].data[8];
+ gTasks[taskId].data[8]++;
+ if (data8 >= gTasks[taskId].data[2])
+ {
+ gTasks[taskId].data[8] = 0;
+ r0 = gTasks[taskId].data[0];
+ r1 = gTasks[taskId].data[1];
+ gTasks[taskId].data[3]--;
+ r4 = gTasks[taskId].data[3];
+ PlaySE12WithPanning(r0, r1);
+ if (r4 == 0)
+ {
+ DestroyTask(taskId);
+ gUnknown_0202F7B3--;
+ }
+ }
+}
+
+static void ScriptCmd_panse_1D(void)
+{
+ u16 r5;
+ u8 r0;
+ u8 r8;
+ s8 r4;
+ u8 taskId;
+
+ gBattleAnimScriptPtr++;
+ r5 = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 2);
+ r8 = SCRIPT_READ_8(gBattleAnimScriptPtr + 3);
+ r4 = sub_8076F98(r0);
+ taskId = CreateTask(sub_80775CC, 1);
+ gTasks[taskId].data[0] = r5;
+ gTasks[taskId].data[1] = r4;
+ gTasks[taskId].data[2] = r8;
+ gUnknown_0202F7B3++;
+ gBattleAnimScriptPtr += 4;
+}
+
+static void sub_80775CC(u8 taskId)
+{
+ s16 r0;
+
+ r0 = gTasks[taskId].data[2];
+ gTasks[taskId].data[2]--;
+ if (r0 <= 0)
+ {
+ PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[1]);
+ DestroyTask(taskId);
+ gUnknown_0202F7B3--;
+ }
+}
+
+static void ScriptCmd_createtask_1F(void)
+{
+ TaskFunc func;
+ u8 numArgs;
+ int i;
+ u8 taskId;
+
+ gBattleAnimScriptPtr++;
+ func = (TaskFunc)SCRIPT_READ_32(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr += 4;
+ numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr++;
+ for (i = 0; i < numArgs; i++)
+ {
+ gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr += 2;
+ }
+ taskId = CreateTask(func, 1);
+ func(taskId);
+ gUnknown_0202F7B3++;
+}
+
+static void ScriptCmd_waitsound(void)
+{
+ if (gUnknown_0202F7B3 != 0)
+ {
+ gUnknown_03004AF0 = 0;
+ gUnknown_0202F7B0 = 1;
+ }
+ else if (IsSEPlaying())
+ {
+ gUnknown_03004AF0++;
+ if (gUnknown_03004AF0 > 0x5A)
+ {
+ m4aMPlayStop(&gMPlay_SE1);
+ m4aMPlayStop(&gMPlay_SE2);
+ gUnknown_03004AF0 = 0;
+ }
+ else
+ {
+ gUnknown_0202F7B0 = 1;
+ }
+ }
+ else
+ {
+ gUnknown_03004AF0 = 0;
+ gBattleAnimScriptPtr++;
+ gUnknown_0202F7B0 = 0;
+ }
+}
+
+static void ScriptCmd_jumpvareq(void)
+{
+ u8 r2;
+ s16 r1;
+ u8 *addr;
+
+ gBattleAnimScriptPtr++;
+ r2 = SCRIPT_READ_8(gBattleAnimScriptPtr);
+ r1 = SCRIPT_READ_16(gBattleAnimScriptPtr + 1);
+ if (r1 == gBattleAnimArgs[r2])
+ {
+ addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr + 3);
+ gBattleAnimScriptPtr = addr;
+ }
+ else
+ {
+ gBattleAnimScriptPtr += 7;
+ }
+}
+
+static void ScriptCmd_jumpunkcond(void)
+{
+ u8 *addr;
+
+ gBattleAnimScriptPtr++;
+ if (sub_8076BE0())
+ {
+ addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr);
+ gBattleAnimScriptPtr = addr;
+ }
+ else
+ {
+ gBattleAnimScriptPtr += 4;
+ }
+}
+
+static void ScriptCmd_monbgprio_28(void)
+{
+ u8 r2;
+ u8 r0;
+ u8 r4;
+
+ r2 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
+ gBattleAnimScriptPtr += 2;
+ if (r2 != 0)
+ r0 = gUnknown_0202F7C9;
+ else
+ r0 = gUnknown_0202F7C8;
+ r4 = battle_get_per_side_status(r0);
+ if (!sub_8076BE0() && (r4 == 0 || r4 == 3))
+ {
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG2CNT_BITFIELD.priority = 2;
+ }
+}
+
+static void ScriptCmd_monbgprio_29(void)
+{
+ gBattleAnimScriptPtr++;
+ if (!sub_8076BE0())
+ {
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG2CNT_BITFIELD.priority = 2;
+ }
+}
+
+static void ScriptCmd_monbgprio_2A(void)
+{
+ u8 r6;
+ u8 r4;
+ u8 r0;
+
+ r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
+ gBattleAnimScriptPtr += 2;
+ if (battle_side_get_owner(gUnknown_0202F7C8) != battle_side_get_owner(gUnknown_0202F7C9))
+ {
+ if (r6 != 0)
+ r0 = gUnknown_0202F7C9;
+ else
+ r0 = gUnknown_0202F7C8;
+ r4 = battle_get_per_side_status(r0);
+ if (!sub_8076BE0() && (r4 == 0 || r4 == 3))
+ {
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG2CNT_BITFIELD.priority = 2;
+ }
+ }
+}
+
+static void ScriptCmd_invisible(void)
+{
+ u8 r0;
+ u8 spriteId;
+
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
+ spriteId = obj_id_for_side_relative_to_move(r0);
+ if (spriteId != 0xFF)
+ {
+ gSprites[spriteId].invisible = TRUE;
+ }
+ gBattleAnimScriptPtr += 2;
+}
+
+static void ScriptCmd_visible(void)
+{
+ u8 r0;
+ u8 spriteId;
+
+ r0 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
+ spriteId = obj_id_for_side_relative_to_move(r0);
+ if (spriteId != 0xFF)
+ {
+ gSprites[spriteId].invisible = FALSE;
+ }
+ gBattleAnimScriptPtr += 2;
+}
+
+static void ScriptCmd_doublebattle_2D(void)
+{
+ u8 r7;
+ u8 r4;
+ u8 spriteId;
+
+ r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
+ gBattleAnimScriptPtr += 2;
+ if (!sub_8076BE0() && IsDoubleBattle()
+ && battle_side_get_owner(gUnknown_0202F7C8) == battle_side_get_owner(gUnknown_0202F7C9))
+ {
+ if (r7 == 0)
+ {
+ r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C8);
+ spriteId = obj_id_for_side_relative_to_move(0);
+ }
+ else
+ {
+ r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C9);
+ spriteId = obj_id_for_side_relative_to_move(1);
+ }
+ if (spriteId != 0xFF)
+ {
+ gSprites[spriteId].invisible = FALSE;
+ if (r4 == 2)
+ gSprites[spriteId].oam.priority = 3;
+ if (r4 == 1)
+ sub_8076464(0);
+ else
+ sub_8076464(1);
+ }
+ }
+}
+
+static void ScriptCmd_doublebattle_2E(void)
+{
+ u8 r7;
+ u8 r4;
+ u8 spriteId;
+
+ r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1);
+ gBattleAnimScriptPtr += 2;
+ if (!sub_8076BE0() && IsDoubleBattle()
+ && battle_side_get_owner(gUnknown_0202F7C8) == battle_side_get_owner(gUnknown_0202F7C9))
+ {
+ if (r7 == 0)
+ {
+ r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C8);
+ spriteId = obj_id_for_side_relative_to_move(0);
+ }
+ else
+ {
+ r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C9);
+ spriteId = obj_id_for_side_relative_to_move(1);
+ }
+ if (spriteId != 0xFF && r4 == 2)
+ {
+ gSprites[spriteId].oam.priority = 2;
+ }
+ }
+}
+
+static void ScriptCmd_stopsound(void)
+{
+ m4aMPlayStop(&gMPlay_SE1);
+ m4aMPlayStop(&gMPlay_SE2);
+ gBattleAnimScriptPtr++;
+}
diff --git a/src/sound.c b/src/sound.c
index c244c5cbe..e757eedf5 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -526,7 +526,7 @@ void PlaySE(u16 songNum)
m4aSongNumStart(songNum);
}
-void PlaySE12WithPanning(u16 songNum, u8 pan)
+void PlaySE12WithPanning(u16 songNum, s8 pan)
{
m4aSongNumStart(songNum);
m4aMPlayImmInit(&gMPlay_SE1);
@@ -535,21 +535,21 @@ void PlaySE12WithPanning(u16 songNum, u8 pan)
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
}
-void PlaySE1WithPanning(u16 songNum, u8 pan)
+void PlaySE1WithPanning(u16 songNum, s8 pan)
{
m4aSongNumStart(songNum);
m4aMPlayImmInit(&gMPlay_SE1);
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
}
-void PlaySE2WithPanning(u16 songNum, u8 pan)
+void PlaySE2WithPanning(u16 songNum, s8 pan)
{
m4aSongNumStart(songNum);
m4aMPlayImmInit(&gMPlay_SE2);
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
}
-void SE12PanpotControl(u8 pan)
+void SE12PanpotControl(s8 pan)
{
m4aMPlayPanpotControl(&gMPlay_SE1, 0xFFFF, pan);
m4aMPlayPanpotControl(&gMPlay_SE2, 0xFFFF, pan);
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 3081b670d..1e0c06359 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -484,65 +484,7 @@ gMPlay_PokemonCry: @ 202F79C
gPokemonCryBGMDuckingCounter: @ 202F7A0
.space 0x4
-gUnknown_0202F7A4: @ 202F7A4
- .space 0x4
-
-gUnknown_0202F7A8: @ 202F7A8
- .space 0x4
-
-gUnknown_0202F7AC: @ 202F7AC
- .space 0x4
-
-gUnknown_0202F7B0: @ 202F7B0
- .space 0x1
-
-gUnknown_0202F7B1: @ 202F7B1
- .space 0x1
-
-gUnknown_0202F7B2: @ 202F7B2
- .space 0x1
-
-gUnknown_0202F7B3: @ 202F7B3
- .space 0x1
-
-gUnknown_0202F7B4: @ 202F7B4
- .space 0x4
-
-gUnknown_0202F7B8: @ 202F7B8
- .space 0x4
-
-gUnknown_0202F7BC: @ 202F7BC
- .space 0x2
-
-gUnknown_0202F7BE: @ 202F7BE
- .space 0x2
-
-gUnknown_0202F7C0: @ 202F7C0
- .space 0x2
-
-gUnknown_0202F7C2: @ 202F7C2
- .space 0x2
-
-gUnknown_0202F7C4: @ 202F7C4
- .space 0x1
-
-gUnknown_0202F7C5: @ 202F7C5
- .space 0x1
-
-gUnknown_0202F7C6: @ 202F7C6
- .space 0x2
-
-gUnknown_0202F7C8: @ 202F7C8
- .space 0x1
-
-gUnknown_0202F7C9: @ 202F7C9
- .space 0x1
-
-gUnknown_0202F7CA: @ 202F7CA
- .space 0x8
-
-gUnknown_0202F7D2: @ 202F7D2
- .space 0x2
+ .include "src/battle_anim.o"
gUnknown_0202F7D4: @ 202F7D4
.space 0x10