summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2017-05-08 18:52:58 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2017-05-08 16:52:58 -0700
commite75c3262f37483d3503126bebf8bf8b7b662d345 (patch)
treebd8c4561f47417cf4aa33c6da23330cee1f141d0
parente6868bbdb2b9a0f00085029817d3a451781973cd (diff)
Decompile battle interface (#281)
* start decompiling * more decompilation * sub_8044804 refuses to match. moving on... * decompile sub_80451A0 * more decompilation * finish decompiling * clean up a bit * remove trailing whitespace and change tabs to spaces
-rw-r--r--asm/battle_interface.s5500
-rw-r--r--data/text/battle_strings.inc6
-rw-r--r--include/songs.h6
-rw-r--r--include/text.h5
-rw-r--r--ld_script.txt2
-rw-r--r--src/battle_interface.c3076
-rw-r--r--src/text.c2
7 files changed, 3088 insertions, 5509 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
deleted file mode 100644
index b84342e18..000000000
--- a/asm/battle_interface.s
+++ /dev/null
@@ -1,5500 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_804373C
-sub_804373C: @ 804373C
- movs r0, 0x9
- bx lr
- thumb_func_end sub_804373C
-
- thumb_func_start sub_8043740
-sub_8043740: @ 8043740
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r7, r1, 0
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- movs r3, 0
- movs r2, 0
-_0804375C:
- lsls r0, r3, 24
- asrs r0, 24
- mov r3, sp
- adds r1, r3, r0
- strb r2, [r1]
- adds r0, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- asrs r0, 24
- cmp r0, 0x3
- ble _0804375C
- movs r3, 0x3
- movs r0, 0x1
- negs r0, r0
- mov r9, r0
- mov r8, sp
-_0804377C:
- lsls r0, r5, 16
- asrs r6, r0, 16
- cmp r6, 0
- ble _080437AA
- lsls r4, r3, 24
- asrs r4, 24
- mov r1, sp
- adds r5, r1, r4
- adds r0, r6, 0
- movs r1, 0xA
- bl __modsi3
- strb r0, [r5]
- adds r0, r6, 0
- movs r1, 0xA
- bl __divsi3
- lsls r0, 16
- lsrs r5, r0, 16
- subs r4, 0x1
- lsls r4, 24
- lsrs r3, r4, 24
- b _0804377C
-_080437AA:
- lsls r1, r3, 24
- asrs r0, r1, 24
- cmp r0, r9
- ble _080437CE
- movs r4, 0xFF
- movs r3, 0x1
- negs r3, r3
-_080437B8:
- asrs r2, r1, 24
- mov r5, sp
- adds r1, r5, r2
- ldrb r0, [r1]
- orrs r0, r4
- strb r0, [r1]
- subs r2, 0x1
- lsls r1, r2, 24
- asrs r0, r1, 24
- cmp r0, r3
- bgt _080437B8
-_080437CE:
- mov r1, r8
- ldrb r0, [r1, 0x3]
- cmp r0, 0xFF
- bne _080437DA
- movs r0, 0
- strb r0, [r1, 0x3]
-_080437DA:
- mov r2, r10
- cmp r2, 0
- bne _0804386A
- movs r3, 0
- movs r1, 0
- movs r6, 0xFC
- lsls r6, 8
- movs r5, 0x1E
- mov r12, r5
-_080437EC:
- lsls r1, 24
- asrs r2, r1, 24
- mov r0, sp
- adds r5, r0, r2
- ldrb r0, [r5]
- mov r8, r1
- cmp r0, 0xFF
- bne _08043822
- lsls r1, r2, 1
- adds r1, r7
- ldrh r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- mov r2, r12
- orrs r0, r2
- strh r0, [r1]
- lsls r3, 24
- asrs r1, r3, 23
- adds r1, r7
- adds r1, 0x40
- ldrh r2, [r1]
- adds r0, r6, 0
- ands r0, r2
- mov r5, r12
- orrs r0, r5
- strh r0, [r1]
- b _08043852
-_08043822:
- lsls r2, 1
- adds r2, r7
- ldrh r0, [r2]
- adds r1, r6, 0
- ands r1, r0
- ldrb r0, [r5]
- adds r0, 0x14
- orrs r1, r0
- strh r1, [r2]
- lsls r4, r3, 24
- asrs r3, r4, 24
- lsls r2, r3, 1
- adds r2, r7
- adds r2, 0x40
- ldrh r0, [r2]
- adds r1, r6, 0
- ands r1, r0
- mov r5, sp
- adds r0, r5, r3
- ldrb r0, [r0]
- adds r0, 0x34
- orrs r1, r0
- strh r1, [r2]
- adds r3, r4, 0
-_08043852:
- movs r0, 0x80
- lsls r0, 17
- add r0, r8
- lsrs r1, r0, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r3, r2
- lsrs r3, r0, 24
- asrs r0, 24
- cmp r0, 0x3
- ble _080437EC
- b _080438CE
-_0804386A:
- movs r3, 0
- movs r4, 0xFC
- lsls r4, 8
- movs r6, 0x1E
-_08043872:
- lsls r1, r3, 24
- asrs r2, r1, 24
- mov r3, sp
- adds r5, r3, r2
- ldrb r0, [r5]
- adds r3, r1, 0
- cmp r0, 0xFF
- bne _0804389E
- lsls r1, r2, 1
- adds r1, r7
- ldrh r2, [r1]
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r6
- strh r0, [r1]
- adds r1, 0x40
- ldrh r2, [r1]
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r6
- strh r0, [r1]
- b _080438C0
-_0804389E:
- lsls r2, 1
- adds r2, r7
- ldrh r0, [r2]
- adds r1, r4, 0
- ands r1, r0
- ldrb r0, [r5]
- adds r0, 0x14
- orrs r1, r0
- strh r1, [r2]
- adds r2, 0x40
- ldrh r0, [r2]
- adds r1, r4, 0
- ands r1, r0
- ldrb r0, [r5]
- adds r0, 0x34
- orrs r1, r0
- strh r1, [r2]
-_080438C0:
- movs r5, 0x80
- lsls r5, 17
- adds r0, r3, r5
- lsrs r3, r0, 24
- asrs r0, 24
- cmp r0, 0x3
- ble _08043872
-_080438CE:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8043740
-
- thumb_func_start unref_sub_80438E0
-unref_sub_80438E0: @ 80438E0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- movs r1, 0x1E
- strh r1, [r5, 0x8]
- lsls r0, 16
- asrs r0, 16
- adds r1, r5, 0
- movs r2, 0
- bl sub_8043740
- lsls r4, 16
- asrs r4, 16
- adds r5, 0xA
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl sub_8043740
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end unref_sub_80438E0
-
- thumb_func_start battle_make_oam_normal_battle
-battle_make_oam_normal_battle: @ 8043914
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- movs r0, 0
- str r0, [sp]
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08043A28
- mov r0, r10
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080439AC
- ldr r4, _0804399C @ =gSpriteTemplate_820A4EC
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _080439A0 @ =gSprites
- lsls r1, r6, 4
- adds r1, r6
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x1]
- movs r3, 0x3F
- adds r0, r3, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r2, r4
- ldrb r0, [r2, 0x1]
- ands r3, r0
- strb r3, [r2, 0x1]
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x40
- ldr r4, _080439A4 @ =0x000003ff
- adds r0, r4, 0
- ands r1, r0
- ldr r0, _080439A8 @ =0xfffffc00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- b _080439F2
- .align 2, 0
-_0804399C: .4byte gSpriteTemplate_820A4EC
-_080439A0: .4byte gSprites
-_080439A4: .4byte 0x000003ff
-_080439A8: .4byte 0xfffffc00
-_080439AC:
- ldr r4, _08043A14 @ =gSpriteTemplate_820A51C
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08043A18 @ =gSprites
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r2, r0
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x20
- ldr r5, _08043A1C @ =0x000003ff
- adds r0, r5, 0
- ands r1, r0
- ldr r0, _08043A20 @ =0xfffffc00
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- movs r0, 0x2
- str r0, [sp]
-_080439F2:
- ldr r2, _08043A18 @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r2
- strh r7, [r0, 0x6]
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- adds r1, r0, r2
- strh r6, [r1, 0x38]
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _08043A24 @ =sub_8043D5C
- str r1, [r0]
- b _08043B50
- .align 2, 0
-_08043A14: .4byte gSpriteTemplate_820A51C
-_08043A18: .4byte gSprites
-_08043A1C: .4byte 0x000003ff
-_08043A20: .4byte 0xfffffc00
-_08043A24: .4byte sub_8043D5C
-_08043A28:
- mov r0, r10
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08043ACC
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- ldr r4, _08043AB8 @ =gSpriteTemplate_820A4EC
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _08043ABC @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r4
- strh r7, [r0, 0x6]
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r3, r2, r4
- strh r6, [r3, 0x38]
- ldrh r1, [r3, 0x4]
- mov r8, r1
- mov r5, r8
- lsls r1, r5, 22
- lsrs r1, 22
- adds r1, 0x20
- ldr r5, _08043AC0 @ =0x000003ff
- adds r0, r5, 0
- ands r1, r0
- ldr r0, _08043AC4 @ =0xfffffc00
- mov r5, r8
- ands r0, r5
- orrs r0, r1
- strh r0, [r3, 0x4]
- adds r4, 0x1C
- adds r2, r4
- ldr r0, _08043AC8 @ =sub_8043D5C
- str r0, [r2]
- movs r0, 0x1
- b _08043B4E
- .align 2, 0
-_08043AB8: .4byte gSpriteTemplate_820A4EC
-_08043ABC: .4byte gSprites
-_08043AC0: .4byte 0x000003ff
-_08043AC4: .4byte 0xfffffc00
-_08043AC8: .4byte sub_8043D5C
-_08043ACC:
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- ldr r4, _08043C14 @ =gSpriteTemplate_820A51C
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- mov r0, r10
- bl battle_get_per_side_status
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 25
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r4, _08043C18 @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r4
- strh r7, [r0, 0x6]
- lsls r2, r7, 4
- adds r2, r7
- lsls r2, 2
- adds r3, r2, r4
- strh r6, [r3, 0x38]
- ldrh r1, [r3, 0x4]
- mov r8, r1
- mov r5, r8
- lsls r1, r5, 22
- lsrs r1, 22
- adds r1, 0x20
- ldr r5, _08043C1C @ =0x000003ff
- adds r0, r5, 0
- ands r1, r0
- ldr r0, _08043C20 @ =0xfffffc00
- mov r5, r8
- ands r0, r5
- orrs r0, r1
- strh r0, [r3, 0x4]
- adds r4, 0x1C
- adds r2, r4
- ldr r0, _08043C24 @ =sub_8043D5C
- str r0, [r2]
- movs r0, 0x2
-_08043B4E:
- str r0, [sp]
-_08043B50:
- ldr r0, _08043C28 @ =gUnknown_02024A72
- add r0, r10
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- ldr r1, _08043C2C @ =gSpriteTemplate_820A56C
- adds r0, r1
- movs r1, 0x8C
- movs r2, 0x3C
- movs r3, 0
- bl CreateSpriteAtEnd
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r1, _08043C18 @ =gSprites
- mov r8, r1
- add r4, r8
- mov r0, r10
- bl battle_side_get_owner
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 21
- ldr r0, _08043C30 @ =gSubspriteTables_820A684
- adds r1, r0
- adds r0, r4, 0
- bl SetSubspriteTables
- adds r2, r4, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r2, 0x4
- mov r9, r2
- mov r1, r9
- orrs r0, r1
- strb r0, [r4, 0x5]
- movs r0, 0x1
- bl sub_8043CDC
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r2, _08043C34 @ =0x06010000
- adds r1, r2
- ldr r2, _08043C38 @ =REG_BG0HOFS
- bl CpuSet
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- add r0, r8
- strh r5, [r0, 0x38]
- mov r2, r10
- strh r2, [r0, 0x3A]
- adds r0, 0x3E
- ldrb r1, [r0]
- mov r5, r9
- orrs r1, r5
- strb r1, [r0]
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- add r0, r8
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r5
- strb r1, [r0]
- strh r6, [r4, 0x38]
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x3A]
- adds r4, 0x3E
- ldrb r0, [r4]
- orrs r0, r5
- strb r0, [r4]
- adds r0, r6, 0
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08043C14: .4byte gSpriteTemplate_820A51C
-_08043C18: .4byte gSprites
-_08043C1C: .4byte 0x000003ff
-_08043C20: .4byte 0xfffffc00
-_08043C24: .4byte sub_8043D5C
-_08043C28: .4byte gUnknown_02024A72
-_08043C2C: .4byte gSpriteTemplate_820A56C
-_08043C30: .4byte gSubspriteTables_820A684
-_08043C34: .4byte 0x06010000
-_08043C38: .4byte REG_BG0HOFS
- thumb_func_end battle_make_oam_normal_battle
-
- thumb_func_start battle_make_oam_safari_battle
-battle_make_oam_safari_battle: @ 8043C3C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r4, _08043CC8 @ =gSpriteTemplate_820A54C
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA0
- movs r3, 0x1
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08043CCC @ =gSprites
- mov r9, r1
- lsls r4, r6, 4
- adds r4, r6
- lsls r4, 2
- add r4, r9
- ldrb r3, [r4, 0x1]
- movs r2, 0x3F
- adds r1, r2, 0
- ands r1, r3
- strb r1, [r4, 0x1]
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- mov r7, r9
- adds r5, r3, r7
- ldrb r1, [r5, 0x1]
- ands r2, r1
- strb r2, [r5, 0x1]
- ldrh r1, [r5, 0x4]
- mov r8, r1
- mov r7, r8
- lsls r2, r7, 22
- lsrs r2, 22
- adds r2, 0x40
- ldr r7, _08043CD0 @ =0x000003ff
- adds r1, r7, 0
- ands r2, r1
- ldr r1, _08043CD4 @ =0xfffffc00
- mov r7, r8
- ands r1, r7
- orrs r1, r2
- strh r1, [r5, 0x4]
- strh r0, [r4, 0x6]
- strh r6, [r5, 0x38]
- movs r0, 0x1C
- add r9, r0
- add r3, r9
- ldr r0, _08043CD8 @ =sub_8043D5C
- str r0, [r3]
- adds r0, r6, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08043CC8: .4byte gSpriteTemplate_820A54C
-_08043CCC: .4byte gSprites
-_08043CD0: .4byte 0x000003ff
-_08043CD4: .4byte 0xfffffc00
-_08043CD8: .4byte sub_8043D5C
- thumb_func_end battle_make_oam_safari_battle
-
- thumb_func_start sub_8043CDC
-sub_8043CDC: @ 8043CDC
- lsls r0, 24
- lsrs r0, 19
- ldr r1, _08043CE8 @ =gUnknown_08D1216C
- adds r0, r1
- bx lr
- .align 2, 0
-_08043CE8: .4byte gUnknown_08D1216C
- thumb_func_end sub_8043CDC
-
- thumb_func_start sub_8043CEC
-sub_8043CEC: @ 8043CEC
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x38]
- lsls r0, 24
- lsrs r5, r0, 24
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08043D1C
- cmp r0, 0x1
- bgt _08043D30
- cmp r0, 0
- bne _08043D30
- ldr r2, _08043D18 @ =gSprites
- lsls r3, r5, 4
- adds r1, r3, r5
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
- b _08043D3E
- .align 2, 0
-_08043D18: .4byte gSprites
-_08043D1C:
- ldr r2, _08043D2C @ =gSprites
- lsls r3, r5, 4
- adds r1, r3, r5
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
- b _08043D3E
- .align 2, 0
-_08043D2C: .4byte gSprites
-_08043D30:
- ldr r2, _08043D58 @ =gSprites
- lsls r3, r5, 4
- adds r1, r3, r5
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x20]
- adds r0, 0x8
-_08043D3E:
- strh r0, [r4, 0x20]
- ldrh r0, [r1, 0x22]
- strh r0, [r4, 0x22]
- adds r0, r3, r5
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x24]
- strh r1, [r4, 0x24]
- ldrh r0, [r0, 0x26]
- strh r0, [r4, 0x26]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043D58: .4byte gSprites
- thumb_func_end sub_8043CEC
-
- thumb_func_start sub_8043D5C
-sub_8043D5C: @ 8043D5C
- ldrh r1, [r0, 0x38]
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08043D80 @ =gSprites
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r3
- ldrh r1, [r2, 0x20]
- adds r1, 0x40
- strh r1, [r0, 0x20]
- ldrh r1, [r2, 0x22]
- strh r1, [r0, 0x22]
- ldrh r1, [r2, 0x24]
- strh r1, [r0, 0x24]
- ldrh r1, [r2, 0x26]
- strh r1, [r0, 0x26]
- bx lr
- .align 2, 0
-_08043D80: .4byte gSprites
- thumb_func_end sub_8043D5C
-
- thumb_func_start sub_8043D84
-sub_8043D84: @ 8043D84
- push {r4,r5,lr}
- ldr r5, [sp, 0xC]
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 2
- ldr r0, _08043DA8 @ =0x02017850
- adds r4, r0
- strb r1, [r4]
- str r2, [r4, 0x4]
- str r3, [r4, 0x8]
- str r5, [r4, 0xC]
- ldr r0, _08043DAC @ =0xffff8000
- str r0, [r4, 0x10]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043DA8: .4byte 0x02017850
-_08043DAC: .4byte 0xffff8000
- thumb_func_end sub_8043D84
-
- thumb_func_start sub_8043DB0
-sub_8043DB0: @ 8043DB0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08043DF8 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r4
- adds r1, r2, 0
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1]
- movs r0, 0x38
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- ldrh r1, [r2, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08043DF8: .4byte gSprites
- thumb_func_end sub_8043DB0
-
- thumb_func_start sub_8043DFC
-sub_8043DFC: @ 8043DFC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08043E4C @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- adds r4, r2, 0
- adds r4, 0x3E
- ldrb r1, [r4]
- movs r3, 0x5
- negs r3, r3
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- movs r0, 0x38
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r4, [r0]
- adds r1, r3, 0
- ands r1, r4
- strb r1, [r0]
- ldrh r1, [r2, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043E4C: .4byte gSprites
- thumb_func_end sub_8043DFC
-
- thumb_func_start sub_8043E50
-sub_8043E50: @ 8043E50
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08043E6C @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r3, r4
- strh r1, [r3, 0x20]
- strh r2, [r3, 0x22]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08043E6C: .4byte gSprites
- thumb_func_end sub_8043E50
-
- thumb_func_start unref_sub_8043E70
-unref_sub_8043E70: @ 8043E70
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08043EAC @ =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- ldrh r1, [r4, 0x6]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- movs r0, 0x38
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- bl DestroySprite
- adds r0, r4, 0
- bl DestroySprite
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08043EAC: .4byte gSprites
- thumb_func_end unref_sub_8043E70
-
- thumb_func_start nullsub_11
-nullsub_11: @ 8043EB0
- bx lr
- thumb_func_end nullsub_11
-
- thumb_func_start sub_8043EB4
-sub_8043EB4: @ 8043EB4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- movs r6, 0
- ldr r1, _08043F38 @ =gUnknown_02024A68
- mov r8, r1
- ldrb r2, [r1]
- cmp r6, r2
- bge _08043F2C
- ldr r1, _08043F3C @ =gSprites
- mov r12, r1
- movs r1, 0x3
- ands r0, r1
- lsls r5, r0, 2
- movs r7, 0xD
- negs r7, r7
- ldr r2, _08043F40 @ =gUnknown_03004340
- mov r9, r2
-_08043EDE:
- mov r1, r9
- adds r0, r6, r1
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- add r1, r12
- ldrb r4, [r1, 0x6]
- ldrh r3, [r1, 0x38]
- lsls r3, 24
- lsrs r3, 24
- ldrb r2, [r1, 0x5]
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r5
- strb r0, [r1, 0x5]
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- add r1, r12
- ldrb r2, [r1, 0x5]
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r5
- strb r0, [r1, 0x5]
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- add r1, r12
- ldrb r2, [r1, 0x5]
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r5
- strb r0, [r1, 0x5]
- adds r6, 0x1
- mov r2, r8
- ldrb r2, [r2]
- cmp r6, r2
- blt _08043EDE
-_08043F2C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08043F38: .4byte gUnknown_02024A68
-_08043F3C: .4byte gSprites
-_08043F40: .4byte gUnknown_03004340
- thumb_func_end sub_8043EB4
-
- thumb_func_start sub_8043F44
-sub_8043F44: @ 8043F44
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
- movs r4, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08043F70
- adds r0, r6, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- beq _08043F6A
- movs r5, 0x2C
- movs r4, 0x1E
- b _08043FA8
-_08043F6A:
- movs r5, 0x9E
- movs r4, 0x58
- b _08043FA8
-_08043F70:
- adds r0, r6, 0
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08043F9E
- cmp r0, 0x1
- bgt _08043F88
- cmp r0, 0
- beq _08043F92
- b _08043FA8
-_08043F88:
- cmp r0, 0x2
- beq _08043F98
- cmp r0, 0x3
- beq _08043FA4
- b _08043FA8
-_08043F92:
- movs r5, 0x9F
- movs r4, 0x4D
- b _08043FA8
-_08043F98:
- movs r5, 0xAB
- movs r4, 0x66
- b _08043FA8
-_08043F9E:
- movs r5, 0x2C
- movs r4, 0x13
- b _08043FA8
-_08043FA4:
- movs r5, 0x20
- movs r4, 0x2C
-_08043FA8:
- ldr r0, _08043FBC @ =gUnknown_03004340
- adds r0, r6, r0
- ldrb r0, [r0]
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_8043E50
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08043FBC: .4byte gUnknown_03004340
- thumb_func_end sub_8043F44
-
- thumb_func_start sub_8043FC0
-sub_8043FC0: @ 8043FC0
- push {r4-r7,lr}
- sub sp, 0x20
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- ldr r1, _08044000 @ =gUnknown_0820A81C
- mov r0, sp
- movs r2, 0x1E
- bl memcpy
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _08044010
- ldr r1, _08044004 @ =gSprites
- lsls r4, r5, 4
- adds r0, r4, r5
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r7, _08044008 @ =gUnknown_0820A80C
- cmp r0, 0
- bne _0804402E
- ldr r7, _0804400C @ =gUnknown_0820A804
- b _0804402E
- .align 2, 0
-_08044000: .4byte gUnknown_0820A81C
-_08044004: .4byte gSprites
-_08044008: .4byte gUnknown_0820A80C
-_0804400C: .4byte gUnknown_0820A804
-_08044010:
- ldr r1, _08044040 @ =gSprites
- lsls r4, r5, 4
- adds r0, r4, r5
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r7, _08044044 @ =gUnknown_0820A80C
- cmp r0, 0
- bne _0804402E
- ldr r7, _08044048 @ =gUnknown_0820A814
-_0804402E:
- mov r3, sp
- adds r3, 0x6
- cmp r6, 0x64
- bne _0804404C
- adds r0, r3, 0
- movs r1, 0x64
- movs r2, 0
- movs r3, 0x3
- b _0804408C
- .align 2, 0
-_08044040: .4byte gSprites
-_08044044: .4byte gUnknown_0820A80C
-_08044048: .4byte gUnknown_0820A814
-_0804404C:
- movs r1, 0xFC
- strb r1, [r3]
- mov r3, sp
- adds r3, 0x7
- movs r0, 0x11
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x1
- strb r0, [r3]
- adds r3, 0x1
- strb r1, [r3]
- adds r3, 0x1
- movs r2, 0x14
- strb r2, [r3]
- adds r3, 0x1
- movs r0, 0x4
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0xF0
- strb r0, [r3]
- adds r3, 0x1
- strb r1, [r3]
- adds r3, 0x1
- strb r2, [r3]
- adds r3, 0x1
- movs r0, 0
- strb r0, [r3]
- adds r3, 0x1
- adds r0, r3, 0
- adds r1, r6, 0
- movs r2, 0
- movs r3, 0x2
-_0804408C:
- bl ConvertIntToDecimalStringN
- adds r3, r0, 0
- movs r0, 0xFC
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0x13
- strb r0, [r3]
- adds r3, 0x1
- movs r0, 0xF
- strb r0, [r3]
- movs r0, 0xFF
- strb r0, [r3, 0x1]
- movs r0, 0x80
- lsls r0, 18
- mov r1, sp
- bl sub_80034D4
- ldr r1, _080440E0 @ =gSprites
- adds r0, r4, r5
- lsls r0, 2
- adds r6, r0, r1
- ldr r5, _080440E4 @ =0x02000020
- movs r4, 0x2
-_080440BC:
- ldrh r0, [r6, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldm r7!, {r1}
- adds r1, r0
- adds r0, r5, 0
- ldr r2, _080440E8 @ =REG_BG0CNT
- bl CpuSet
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bne _080440BC
- add sp, 0x20
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080440E0: .4byte gSprites
-_080440E4: .4byte 0x02000020
-_080440E8: .4byte REG_BG0CNT
- thumb_func_end sub_8043FC0
-
- thumb_func_start sub_80440EC
-sub_80440EC: @ 80440EC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r1, _08044144 @ =gUnknown_0820A864
- mov r0, sp
- movs r2, 0x14
- bl memcpy
- ldr r1, _08044148 @ =gSprites
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- adds r4, r0, r1
- movs r0, 0x3A
- ldrsh r5, [r4, r0]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08044136
- lsls r0, r5, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0804414C
-_08044136:
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r7, 0
- mov r2, r8
- bl sub_8044210
- b _080441F0
- .align 2, 0
-_08044144: .4byte gUnknown_0820A864
-_08044148: .4byte gSprites
-_0804414C:
- mov r5, sp
- adds r5, 0x6
- mov r0, r8
- cmp r0, 0
- bne _08044190
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r4, _08044188 @ =gUnknown_0820A848
- cmp r0, 0
- bne _0804416A
- ldr r4, _0804418C @ =gUnknown_0820A83C
-_0804416A:
- movs r0, 0x3
- mov r8, r0
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r5, 0
- movs r2, 0x13
- movs r3, 0x1
- bl sub_8003504
- adds r5, r0, 0
- movs r0, 0xBA
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
- b _080441B6
- .align 2, 0
-_08044188: .4byte gUnknown_0820A848
-_0804418C: .4byte gUnknown_0820A83C
-_08044190:
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r4, _080441FC @ =gUnknown_0820A85C
- cmp r0, 0
- bne _080441A4
- ldr r4, _08044200 @ =gUnknown_0820A854
-_080441A4:
- movs r0, 0x2
- mov r8, r0
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r5, 0
- movs r2, 0xF
- movs r3, 0x1
- bl sub_8003504
-_080441B6:
- movs r0, 0x80
- lsls r0, 18
- mov r1, sp
- bl sub_80034D4
- mov r0, r8
- cmp r0, 0
- beq _080441F0
- ldr r1, _08044204 @ =gSprites
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- adds r6, r0, r1
- adds r7, r4, 0
- ldr r5, _08044208 @ =0x02000020
- mov r4, r8
-_080441D6:
- ldrh r0, [r6, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldm r7!, {r1}
- adds r1, r0
- adds r0, r5, 0
- ldr r2, _0804420C @ =REG_BG0CNT
- bl CpuSet
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bne _080441D6
-_080441F0:
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080441FC: .4byte gUnknown_0820A85C
-_08044200: .4byte gUnknown_0820A854
-_08044204: .4byte gSprites
-_08044208: .4byte 0x02000020
-_0804420C: .4byte REG_BG0CNT
- thumb_func_end sub_80440EC
-
- thumb_func_start sub_8044210
-sub_8044210: @ 8044210
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- mov r9, r6
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r1, _0804427C @ =gUnknown_0820A89C
- mov r0, sp
- movs r2, 0x14
- bl memcpy
- ldr r1, _08044280 @ =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- mov r8, r0
- movs r1, 0x3A
- ldrsh r4, [r0, r1]
- lsls r0, r4, 2
- ldr r1, _08044284 @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08044312
- mov r2, sp
- adds r2, 0x6
- cmp r7, 0
- bne _0804428C
- ldr r7, _08044288 @ =gUnknown_0820A87C
- movs r0, 0x6
- mov r10, r0
- lsls r1, r6, 16
- asrs r1, 16
- adds r0, r2, 0
- movs r2, 0x2B
- movs r3, 0x1
- bl sub_8003504
- adds r2, r0, 0
- movs r0, 0xBA
- strb r0, [r2]
- movs r0, 0xFF
- strb r0, [r2, 0x1]
- b _080442CE
- .align 2, 0
-_0804427C: .4byte gUnknown_0820A89C
-_08044280: .4byte gSprites
-_08044284: .4byte 0x02017800
-_08044288: .4byte gUnknown_0820A87C
-_0804428C:
- ldr r7, _08044324 @ =gUnknown_0820A894
- movs r1, 0x2
- mov r10, r1
- mov r0, r9
- lsls r1, r0, 16
- asrs r1, 16
- adds r0, r2, 0
- movs r2, 0xF
- movs r3, 0x1
- bl sub_8003504
- lsls r0, r4, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080442CE
- movs r0, 0x74
- bl sub_8043CDC
- mov r2, r8
- ldrh r1, [r2, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r2, 0xD0
- lsls r2, 3
- adds r1, r2
- ldr r2, _08044328 @ =0x06010000
- adds r1, r2
- ldr r2, _0804432C @ =REG_BG0CNT
- bl CpuSet
-_080442CE:
- ldr r6, _08044330 @ =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r6
- movs r1, 0x38
- ldrsh r4, [r0, r1]
- movs r0, 0x80
- lsls r0, 18
- mov r1, sp
- bl sub_80034D4
- mov r2, r10
- cmp r2, 0
- beq _08044312
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r6, r0, r6
- ldr r5, _08044334 @ =0x02000020
- mov r4, r10
-_080442F8:
- ldrh r0, [r6, 0x4]
- lsls r0, 22
- lsrs r0, 17
- ldm r7!, {r1}
- adds r1, r0
- adds r0, r5, 0
- ldr r2, _0804432C @ =REG_BG0CNT
- bl CpuSet
- adds r5, 0x40
- subs r4, 0x1
- cmp r4, 0
- bne _080442F8
-_08044312:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08044324: .4byte gUnknown_0820A894
-_08044328: .4byte 0x06010000
-_0804432C: .4byte REG_BG0CNT
-_08044330: .4byte gSprites
-_08044334: .4byte 0x02000020
- thumb_func_end sub_8044210
-
- thumb_func_start sub_8044338
-sub_8044338: @ 8044338
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x14]
- ldr r1, _080443CC @ =gUnknown_0820A864
- mov r0, sp
- movs r2, 0x14
- bl memcpy
- ldr r1, _080443D0 @ =gSprites
- ldr r2, [sp, 0x14]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 7
- ldr r3, _080443D4 @ =0x02000520
- adds r6, r1, r3
- movs r0, 0x5
- mov r8, r0
- adds r0, r4, 0
- bl GetNature
- lsls r0, 24
- mov r4, sp
- adds r4, 0x6
- ldr r1, _080443D8 @ =gNatureNames
- lsrs r0, 22
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl StringCopy
- adds r0, r6, 0
- mov r1, sp
- bl sub_80034D4
- movs r7, 0x6
- movs r5, 0
- mov r1, sp
- adds r1, 0x9
- str r1, [sp, 0x1C]
-_080443AA:
- mov r2, sp
- adds r0, r2, r7
- ldrb r1, [r0]
- adds r0, r1, 0
- subs r0, 0x37
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bls _080443C8
- adds r0, r1, 0
- adds r0, 0x79
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _080443DC
-_080443C8:
- movs r0, 0x2C
- b _080443FA
- .align 2, 0
-_080443CC: .4byte gUnknown_0820A864
-_080443D0: .4byte gSprites
-_080443D4: .4byte 0x02000520
-_080443D8: .4byte gNatureNames
-_080443DC:
- adds r0, r1, 0
- subs r0, 0x4B
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _080443F4
- adds r0, r1, 0
- adds r0, 0x65
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080443F8
-_080443F4:
- movs r0, 0x2D
- b _080443FA
-_080443F8:
- movs r0, 0x2B
-_080443FA:
- bl sub_8043CDC
- lsls r1, r5, 6
- adds r1, r6, r1
- ldr r2, _080444F8 @ =REG_BG0CNT
- bl CpuSet
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r7, 0x1
- cmp r5, r8
- bcc _080443AA
- movs r7, 0x1
- ldr r3, [sp, 0x14]
- lsls r3, 4
- str r3, [sp, 0x18]
- movs r0, 0x1
- add r0, r8
- mov r9, r0
- cmp r7, r9
- bge _08044486
- ldr r1, _080444FC @ =gSprites
- ldr r2, _080444F8 @ =REG_BG0CNT
- mov r10, r2
- ldr r2, [sp, 0x14]
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r1
- mov r8, r0
-_08044436:
- mov r3, r8
- ldrh r0, [r3, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r5, r7, 0
- cmp r7, 0
- bge _08044446
- adds r5, r7, 0x7
-_08044446:
- asrs r5, 3
- lsls r4, r5, 3
- subs r4, r7, r4
- adds r0, r4
- lsls r5, 6
- adds r0, r5
- lsls r0, 5
- ldr r2, _08044500 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- mov r3, r8
- ldrh r0, [r3, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r4, 0x8
- adds r0, r4
- adds r0, r5
- lsls r0, 5
- ldr r2, _08044500 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- adds r7, 0x1
- cmp r7, r9
- blt _08044436
-_08044486:
- ldr r6, _080444FC @ =gSprites
- ldr r3, [sp, 0x18]
- ldr r1, [sp, 0x14]
- adds r0, r3, r1
- lsls r0, 2
- adds r0, r6
- ldrh r5, [r0, 0x38]
- lsls r5, 24
- lsrs r5, 24
- ldr r4, _08044504 @ =0x02000000
- ldr r2, _08044508 @ =0x00016089
- adds r0, r4, r2
- ldrb r1, [r0]
- mov r0, sp
- adds r0, 0x6
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r3, _0804450C @ =0x00016088
- adds r4, r3
- ldrb r1, [r4]
- ldr r0, [sp, 0x1C]
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- mov r1, sp
- movs r0, 0
- strb r0, [r1, 0x5]
- movs r0, 0xBA
- strb r0, [r1, 0x8]
- movs r0, 0x80
- lsls r0, 18
- bl sub_80034D4
- movs r7, 0
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r5, r0, r6
- ldr r4, _08044510 @ =0x02000020
-_080444DA:
- cmp r7, 0x1
- bgt _08044514
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r0, r7, 0x2
- adds r1, r0
- lsls r1, 5
- ldr r0, _08044500 @ =0x06010000
- adds r1, r0
- adds r0, r4, 0
- ldr r2, _080444F8 @ =REG_BG0CNT
- bl CpuSet
- b _0804452A
- .align 2, 0
-_080444F8: .4byte REG_BG0CNT
-_080444FC: .4byte gSprites
-_08044500: .4byte 0x06010000
-_08044504: .4byte 0x02000000
-_08044508: .4byte 0x00016089
-_0804450C: .4byte 0x00016088
-_08044510: .4byte 0x02000020
-_08044514:
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r1, r7, r1
- lsls r1, 5
- ldr r2, _08044544 @ =0x060100c0
- adds r1, r2
- adds r0, r4, 0
- ldr r2, _08044548 @ =REG_BG0CNT
- bl CpuSet
-_0804452A:
- adds r4, 0x40
- adds r7, 0x1
- cmp r7, 0x4
- ble _080444DA
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08044544: .4byte 0x060100c0
-_08044548: .4byte REG_BG0CNT
- thumb_func_end sub_8044338
-
- thumb_func_start sub_804454C
-sub_804454C: @ 804454C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r0, 0
- mov r8, r0
- ldr r0, _0804466C @ =gUnknown_02024A68
- ldrb r0, [r0]
- cmp r8, r0
- blt _08044566
- b _080447E4
-_08044566:
- ldr r1, _08044670 @ =gSprites
- mov r9, r1
- movs r2, 0x64
- mov r10, r2
- ldr r7, _08044674 @ =gUnknown_02024A6A
-_08044570:
- ldr r0, _08044678 @ =gUnknown_03004340
- mov r6, r8
- adds r5, r6, r0
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- mov r1, r9
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _0804467C @ =SpriteCallbackDummy
- cmp r1, r0
- beq _0804458E
- b _080447D4
-_0804458E:
- lsls r0, r6, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080445A2
- b _080447D4
-_080445A2:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080445BA
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080445BA
- b _080447D4
-_080445BA:
- mov r0, r8
- lsls r3, r0, 2
- ldr r0, _08044680 @ =0x02017800
- adds r3, r0
- ldr r0, [r3]
- lsls r0, 27
- lsrs r0, 31
- movs r2, 0x1
- eors r2, r0
- lsls r2, 4
- ldrb r0, [r3]
- movs r6, 0x11
- negs r6, r6
- adds r1, r6, 0
- ands r0, r1
- orrs r0, r2
- strb r0, [r3]
- ldr r0, [r3]
- lsls r0, 27
- lsrs r6, r0, 31
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080446DC
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080445FA
- b _080447D4
-_080445FA:
- ldr r0, _08044684 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0
- beq _0804460C
- b _080447D4
-_0804460C:
- cmp r6, 0x1
- bne _08044694
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r0, [r0, 0x38]
- lsls r0, 24
- lsrs r1, r0, 24
- str r2, [sp]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r0, _08044688 @ =0x06010000
- adds r1, r0
- mov r0, sp
- ldr r2, _0804468C @ =0x05000040
- bl CpuSet
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r2, _08044690 @ =gPlayerParty
- adds r0, r2
- movs r1, 0x39
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- bl sub_8044210
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r6, r10
- muls r6, r0
- adds r0, r6, 0
- ldr r1, _08044690 @ =gPlayerParty
- b _08044766
- .align 2, 0
-_0804466C: .4byte gUnknown_02024A68
-_08044670: .4byte gSprites
-_08044674: .4byte gUnknown_02024A6A
-_08044678: .4byte gUnknown_03004340
-_0804467C: .4byte SpriteCallbackDummy
-_08044680: .4byte 0x02017800
-_08044684: .4byte gBattleTypeFlags
-_08044688: .4byte 0x06010000
-_0804468C: .4byte 0x05000040
-_08044690: .4byte gPlayerParty
-_08044694:
- ldrb r0, [r5]
- bl draw_status_ailment_maybe
- ldrb r0, [r5]
- ldrh r1, [r7]
- mov r2, r10
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _080446D0 @ =gPlayerParty
- adds r1, r6
- movs r2, 0x5
- bl sub_8045A5C
- movs r0, 0x75
- bl sub_8043CDC
- ldrb r2, [r5]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r9
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r2, _080446D4 @ =0x06010680
- adds r1, r2
- ldr r2, _080446D8 @ =REG_BG0CNT
- bl CpuSet
- b _080447BE
- .align 2, 0
-_080446D0: .4byte gPlayerParty
-_080446D4: .4byte 0x06010680
-_080446D8: .4byte REG_BG0CNT
-_080446DC:
- cmp r6, 0x1
- bne _0804478C
- ldr r0, _08044704 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0
- beq _0804470C
- ldrb r0, [r5]
- ldrh r1, [r7]
- mov r6, r10
- muls r6, r1
- adds r1, r6, 0
- ldr r2, _08044708 @ =gEnemyParty
- adds r1, r2
- bl sub_8044338
- b _080447BE
- .align 2, 0
-_08044704: .4byte gBattleTypeFlags
-_08044708: .4byte gEnemyParty
-_0804470C:
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r0, [r0, 0x38]
- lsls r0, 24
- lsrs r1, r0, 24
- str r2, [sp]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r6, _08044780 @ =0x06010000
- adds r1, r6
- mov r0, sp
- ldr r2, _08044784 @ =0x05000040
- bl CpuSet
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r2, _08044788 @ =gEnemyParty
- adds r0, r2
- movs r1, 0x39
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- bl sub_8044210
- ldrb r4, [r5]
- ldrh r0, [r7]
- mov r6, r10
- muls r6, r0
- adds r0, r6, 0
- ldr r1, _08044788 @ =gEnemyParty
-_08044766:
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- adds r0, r4, 0
- movs r2, 0x1
- bl sub_8044210
- b _080447BE
- .align 2, 0
-_08044780: .4byte 0x06010000
-_08044784: .4byte 0x05000040
-_08044788: .4byte gEnemyParty
-_0804478C:
- ldrb r0, [r5]
- bl draw_status_ailment_maybe
- ldrb r0, [r5]
- ldrh r1, [r7]
- movs r6, 0x64
- muls r1, r6
- ldr r4, _080447F4 @ =gEnemyParty
- adds r1, r4
- movs r2, 0x5
- bl sub_8045A5C
- ldr r0, _080447F8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080447BE
- ldrb r0, [r5]
- ldrh r1, [r7]
- muls r1, r6
- adds r1, r4
- movs r2, 0x4
- bl sub_8045A5C
-_080447BE:
- ldr r0, _080447FC @ =gUnknown_03004340
- add r0, r8
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r9
- ldrh r1, [r0, 0x3C]
- movs r2, 0x1
- eors r1, r2
- strh r1, [r0, 0x3C]
-_080447D4:
- adds r7, 0x2
- movs r2, 0x1
- add r8, r2
- ldr r0, _08044800 @ =gUnknown_02024A68
- ldrb r0, [r0]
- cmp r8, r0
- bge _080447E4
- b _08044570
-_080447E4:
- 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
-_080447F4: .4byte gEnemyParty
-_080447F8: .4byte gBattleTypeFlags
-_080447FC: .4byte gUnknown_03004340
-_08044800: .4byte gUnknown_02024A68
- thumb_func_end sub_804454C
-
- thumb_func_start sub_8044804
-sub_8044804: @ 8044804
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- str r1, [sp, 0xC]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x8]
- lsls r2, 24
- lsrs r2, 24
- adds r4, r2, 0
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x10]
- cmp r4, 0
- beq _08044834
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _08044878
-_08044834:
- ldr r0, [sp, 0x8]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08044854
- movs r7, 0
- movs r1, 0x88
- movs r2, 0x60
- movs r0, 0x64
- mov r8, r0
- ldr r5, _08044850 @ =0x0000fffb
- b _08044884
- .align 2, 0
-_08044850: .4byte 0x0000fffb
-_08044854:
- movs r7, 0x1
- cmp r4, 0
- beq _08044864
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _0804486A
-_08044864:
- movs r1, 0x68
- movs r2, 0x28
- b _0804486E
-_0804486A:
- movs r1, 0x68
- movs r2, 0x10
-_0804486E:
- ldr r3, _08044874 @ =0x0000ff9c
- mov r8, r3
- b _08044882
- .align 2, 0
-_08044874: .4byte 0x0000ff9c
-_08044878:
- movs r7, 0x1
- movs r1, 0x68
- movs r2, 0x28
- ldr r5, _08044930 @ =0x0000ff9c
- mov r8, r5
-_08044882:
- movs r5, 0x5
-_08044884:
- movs r6, 0
- str r6, [sp, 0x14]
- lsls r4, r7, 3
- ldr r0, _08044934 @ =gUnknown_0820A754
- mov r10, r0
- lsls r3, r7, 1
- mov r9, r3
- lsls r1, 16
- str r1, [sp, 0x20]
- lsls r2, 16
- str r2, [sp, 0x24]
- ldr r2, _08044938 @ =0x0000ffff
- ldr r1, [sp, 0xC]
- movs r6, 0x5
-_080448A0:
- ldrh r0, [r1]
- cmp r0, r2
- beq _080448B4
- ldr r3, [sp, 0x14]
- lsls r0, r3, 24
- movs r3, 0x80
- lsls r3, 17
- adds r0, r3
- lsrs r0, 24
- str r0, [sp, 0x14]
-_080448B4:
- adds r1, 0x8
- subs r6, 0x1
- cmp r6, 0
- bge _080448A0
- mov r6, r10
- adds r0, r4, r6
- bl LoadCompressedObjectPic
- ldr r0, _0804493C @ =gUnknown_0820A784
- adds r0, r4, r0
- bl LoadSpriteSheet
- ldr r0, _08044940 @ =gUnknown_0820A764
- adds r0, r4, r0
- bl LoadSpritePalette
- ldr r0, _08044944 @ =gUnknown_0820A774
- adds r0, r4, r0
- bl LoadSpritePalette
- mov r1, r9
- adds r0, r1, r7
- lsls r0, 3
- ldr r1, _08044948 @ =gSpriteTemplate_820A7A4
- adds r0, r1
- ldr r2, [sp, 0x20]
- asrs r1, r2, 16
- ldr r3, [sp, 0x24]
- asrs r2, r3, 16
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x18]
- lsls r0, 4
- ldr r6, [sp, 0x18]
- adds r0, r6
- lsls r0, 2
- ldr r1, _0804494C @ =gSprites
- adds r4, r0, r1
- ldr r1, _08044950 @ =gSubspriteTables_820A6E4
- adds r0, r4, 0
- bl SetSubspriteTables
- mov r0, r8
- strh r0, [r4, 0x24]
- strh r5, [r4, 0x2E]
- cmp r7, 0
- beq _08044954
- ldrh r0, [r4, 0x20]
- subs r0, 0x60
- strh r0, [r4, 0x20]
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r4, 0x3]
- b _0804495A
- .align 2, 0
-_08044930: .4byte 0x0000ff9c
-_08044934: .4byte gUnknown_0820A754
-_08044938: .4byte 0x0000ffff
-_0804493C: .4byte gUnknown_0820A784
-_08044940: .4byte gUnknown_0820A764
-_08044944: .4byte gUnknown_0820A774
-_08044948: .4byte gSpriteTemplate_820A7A4
-_0804494C: .4byte gSprites
-_08044950: .4byte gSubspriteTables_820A6E4
-_08044954:
- ldrh r0, [r4, 0x20]
- adds r0, 0x60
- strh r0, [r4, 0x20]
-_0804495A:
- movs r6, 0
- ldr r1, _08044A04 @ =gSprites
- mov r10, r1
- mov r4, sp
- mov r2, r9
- adds r0, r2, r7
- lsls r0, 3
- str r0, [sp, 0x1C]
- movs r3, 0xA
- mov r9, r3
- mov r8, r6
-_08044970:
- ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4
- ldr r5, [sp, 0x24]
- ldr r1, _08044A0C @ =0xfffc0000
- adds r2, r5, r1
- ldr r3, [sp, 0x1C]
- adds r0, r3, r0
- ldr r5, [sp, 0x20]
- asrs r1, r5, 16
- asrs r2, 16
- movs r3, 0x9
- bl CreateSpriteAtEnd
- strb r0, [r4]
- ldr r0, [sp, 0x10]
- cmp r0, 0
- bne _080449A0
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r2, _08044A10 @ =gSprites + 0x1C
- adds r1, r2
- ldr r0, _08044A14 @ =sub_8045180
- str r0, [r1]
-_080449A0:
- ldr r5, _08044A04 @ =gSprites
- cmp r7, 0
- bne _080449BE
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r10
- strh r7, [r0, 0x24]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- add r0, r10
- strh r7, [r0, 0x26]
-_080449BE:
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0
- mov r3, sp
- ldrh r3, [r3, 0x18]
- strh r3, [r0, 0x2E]
- cmp r7, 0
- bne _08044A18
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrh r0, [r1, 0x20]
- adds r0, 0x18
- add r0, r8
- strh r0, [r1, 0x20]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r9
- strh r1, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x78
- b _08044A56
- .align 2, 0
-_08044A04: .4byte gSprites
-_08044A08: .4byte gSpriteTemplate_820A7D4
-_08044A0C: .4byte 0xfffc0000
-_08044A10: .4byte gSprites + 0x1C
-_08044A14: .4byte sub_8045180
-_08044A18:
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- ldrh r3, [r2, 0x20]
- subs r3, 0x18
- movs r1, 0x5
- subs r1, r6
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- subs r3, r0
- strh r3, [r2, 0x20]
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- movs r1, 0x6
- subs r1, r6
- lsls r0, r1, 3
- subs r0, r1
- adds r0, 0xA
- strh r0, [r2, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _08044AC4 @ =0x0000ff88
-_08044A56:
- strh r1, [r0, 0x24]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r7, [r0, 0x32]
- adds r4, 0x1
- movs r2, 0x7
- add r9, r2
- movs r3, 0xA
- add r8, r3
- adds r6, 0x1
- cmp r6, 0x5
- bgt _08044A76
- b _08044970
-_08044A76:
- ldr r0, [sp, 0x8]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _08044B5E
- movs r6, 0
- ldr r5, _08044AC8 @ =gBattleTypeFlags
- mov r10, r5
- ldr r0, _08044ACC @ =0x0000ffff
- mov r9, r0
- ldr r7, _08044AD0 @ =gSprites
- ldr r1, _08044AD4 @ =0x000003ff
- mov r12, r1
- ldr r2, _08044AD8 @ =0xfffffc00
- mov r8, r2
- mov r4, sp
- ldr r5, [sp, 0xC]
-_08044A9A:
- mov r3, r10
- ldrh r1, [r3]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08044ADC
- ldrh r0, [r5]
- cmp r0, r9
- beq _08044AE6
- cmp r0, 0
- bne _08044B2E
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044B46
- .align 2, 0
-_08044AC4: .4byte 0x0000ff88
-_08044AC8: .4byte gBattleTypeFlags
-_08044ACC: .4byte 0x0000ffff
-_08044AD0: .4byte gSprites
-_08044AD4: .4byte 0x000003ff
-_08044AD8: .4byte 0xfffffc00
-_08044ADC:
- ldr r1, [sp, 0x14]
- lsls r0, r1, 24
- asrs r0, 24
- cmp r6, r0
- blt _08044B14
-_08044AE6:
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x1
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- movs r1, 0x1
- strh r1, [r0, 0x3C]
- b _08044B52
-_08044B14:
- ldrh r0, [r5]
- cmp r0, 0
- bne _08044B2E
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044B46
-_08044B2E:
- ldr r0, [r5, 0x4]
- cmp r0, 0
- beq _08044B52
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x2
-_08044B46:
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
-_08044B52:
- adds r4, 0x1
- adds r5, 0x8
- adds r6, 0x1
- cmp r6, 0x5
- ble _08044A9A
- b _08044C38
-_08044B5E:
- movs r6, 0
- ldr r1, _08044BA4 @ =gBattleTypeFlags
- mov r10, r1
- ldr r2, _08044BA8 @ =0x0000ffff
- mov r9, r2
- ldr r7, _08044BAC @ =gSprites
- ldr r3, _08044BB0 @ =0x000003ff
- mov r12, r3
- ldr r5, _08044BB4 @ =0xfffffc00
- mov r8, r5
- ldr r5, [sp, 0xC]
- mov r4, sp
- adds r4, 0x5
-_08044B78:
- mov r0, r10
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08044BB8
- ldrh r0, [r5]
- cmp r0, r9
- beq _08044BC2
- cmp r0, 0
- bne _08044C0A
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044C22
- .align 2, 0
-_08044BA4: .4byte gBattleTypeFlags
-_08044BA8: .4byte 0x0000ffff
-_08044BAC: .4byte gSprites
-_08044BB0: .4byte 0x000003ff
-_08044BB4: .4byte 0xfffffc00
-_08044BB8:
- ldr r1, [sp, 0x14]
- lsls r0, r1, 24
- asrs r0, 24
- cmp r6, r0
- blt _08044BF0
-_08044BC2:
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x1
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- movs r1, 0x1
- strh r1, [r0, 0x3C]
- b _08044C2E
-_08044BF0:
- ldrh r0, [r5]
- cmp r0, 0
- bne _08044C0A
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x3
- b _08044C22
-_08044C0A:
- ldr r0, [r5, 0x4]
- cmp r0, 0
- beq _08044C2E
- ldrb r0, [r4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r7
- ldrh r3, [r2, 0x4]
- lsls r1, r3, 22
- lsrs r1, 22
- adds r1, 0x2
-_08044C22:
- mov r0, r12
- ands r1, r0
- mov r0, r8
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x4]
-_08044C2E:
- subs r4, 0x1
- adds r5, 0x8
- adds r6, 0x1
- cmp r6, 0x5
- ble _08044B78
-_08044C38:
- ldr r0, _08044C98 @ =TaskDummy
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _08044C9C @ =gTasks
- lsls r3, r4, 2
- adds r1, r3, r4
- lsls r1, 3
- adds r0, r1, r2
- mov r5, sp
- ldrh r5, [r5, 0x8]
- strh r5, [r0, 0x8]
- mov r6, sp
- ldrh r6, [r6, 0x18]
- strh r6, [r0, 0xA]
- movs r6, 0
- adds r0, r2, 0
- adds r0, 0xE
- adds r1, r0
-_08044C62:
- mov r5, sp
- adds r0, r5, r6
- ldrb r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- adds r6, 0x1
- cmp r6, 0x5
- ble _08044C62
- adds r0, r3, r4
- lsls r0, 3
- adds r0, r2
- ldrh r6, [r5, 0x10]
- strh r6, [r0, 0x1C]
- movs r0, 0x72
- movs r1, 0
- bl PlaySE12WithPanning
- adds r0, r4, 0
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08044C98: .4byte TaskDummy
-_08044C9C: .4byte gTasks
- thumb_func_end sub_8044804
-
- thumb_func_start sub_8044CA0
-sub_8044CA0: @ 8044CA0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r2, _08044DB4 @ =gTasks
- lsls r3, r0, 2
- adds r1, r3, r0
- lsls r1, 3
- adds r0, r1, r2
- ldrb r4, [r0, 0x1C]
- mov r9, r4
- ldrb r4, [r0, 0xA]
- mov r10, r4
- ldrb r0, [r0, 0x8]
- str r0, [sp, 0x8]
- movs r5, 0
- adds r7, r2, 0
- ldr r0, _08044DB8 @ =gSprites
- mov r12, r0
- str r3, [sp, 0xC]
- adds r0, r7, 0
- adds r0, 0xE
- adds r2, r1, r0
-_08044CD8:
- mov r4, sp
- adds r1, r4, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044CD8
- ldr r1, _08044DBC @ =REG_BLDCNT
- movs r2, 0xFD
- lsls r2, 6
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- movs r0, 0x10
- strh r0, [r1]
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r7
- movs r1, 0x10
- strh r1, [r0, 0x26]
- movs r5, 0
- mov r4, r10
- lsls r4, 4
- str r4, [sp, 0x10]
- ldr r4, _08044DB8 @ =gSprites
- movs r6, 0xD
- negs r6, r6
- movs r3, 0x4
-_08044D14:
- mov r1, sp
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x1]
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x1]
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044D14
- ldr r2, [sp, 0x10]
- add r2, r10
- lsls r2, 2
- add r2, r12
- ldrb r1, [r2, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x1]
- mov r2, r9
- cmp r2, 0
- bne _08044D50
- b _08044E54
-_08044D50:
- movs r5, 0
- mov r6, r12
- mov r9, r5
- adds r3, r6, 0
- adds r3, 0x1C
- mov r4, sp
- movs r7, 0
-_08044D5E:
- ldr r0, [sp, 0x8]
- str r3, [sp, 0x14]
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r3, [sp, 0x14]
- cmp r2, 0
- beq _08044DC4
- movs r0, 0x5
- subs r0, r5
- mov r1, sp
- adds r2, r1, r0
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r7, [r0, 0x30]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- mov r1, r9
- strh r1, [r0, 0x34]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- mov r1, r9
- strh r1, [r0, 0x36]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r1, _08044DC0 @ =sub_8045110
- str r1, [r0]
- ldr r2, _08044DB8 @ =gSprites
- mov r12, r2
- b _08044DFA
- .align 2, 0
-_08044DB4: .4byte gTasks
-_08044DB8: .4byte gSprites
-_08044DBC: .4byte REG_BLDCNT
-_08044DC0: .4byte sub_8045110
-_08044DC4:
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r7, [r0, 0x30]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r2, [r0, 0x34]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r2, [r0, 0x36]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldr r1, _08044E3C @ =sub_8045110
- str r1, [r0]
- ldr r0, _08044E40 @ =gSprites
- mov r12, r0
-_08044DFA:
- adds r4, 0x1
- adds r7, 0x7
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044D5E
- ldr r3, [sp, 0x10]
- add r3, r10
- lsls r3, 2
- mov r1, r12
- adds r0, r3, r1
- movs r2, 0x2E
- ldrsh r1, [r0, r2]
- lsrs r2, r1, 31
- adds r1, r2
- asrs r1, 1
- movs r2, 0
- strh r1, [r0, 0x2E]
- strh r2, [r0, 0x30]
- mov r1, r12
- adds r1, 0x1C
- adds r3, r1
- ldr r1, _08044E44 @ =sub_8045048
- str r1, [r3]
- ldr r1, _08044E48 @ =gSubspriteTables_820A6EC
- bl SetSubspriteTables
- ldr r1, _08044E4C @ =gTasks
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldr r1, _08044E50 @ =sub_8044E74
- b _08044E5E
- .align 2, 0
-_08044E3C: .4byte sub_8045110
-_08044E40: .4byte gSprites
-_08044E44: .4byte sub_8045048
-_08044E48: .4byte gSubspriteTables_820A6EC
-_08044E4C: .4byte gTasks
-_08044E50: .4byte sub_8044E74
-_08044E54:
- ldr r0, [sp, 0xC]
- add r0, r8
- lsls r0, 3
- adds r0, r7
- ldr r1, _08044E70 @ =sub_8044F70
-_08044E5E:
- str r1, [r0]
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08044E70: .4byte sub_8044F70
- thumb_func_end sub_8044CA0
-
- thumb_func_start sub_8044E74
-sub_8044E74: @ 8044E74
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08044EC0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r3, r1, r2
- ldrh r0, [r3, 0x1E]
- adds r1, r0, 0x1
- strh r1, [r3, 0x1E]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08044EAE
- ldrh r0, [r3, 0x26]
- subs r2, r0, 0x1
- strh r2, [r3, 0x26]
- lsls r0, r2, 16
- cmp r0, 0
- blt _08044EBA
- ldr r1, _08044EC4 @ =REG_BLDALPHA
- movs r0, 0x10
- subs r0, r2
- lsls r0, 8
- orrs r2, r0
- strh r2, [r1]
-_08044EAE:
- movs r1, 0x26
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _08044EBA
- ldr r0, _08044EC8 @ =sub_8044ECC
- str r0, [r3]
-_08044EBA:
- pop {r0}
- bx r0
- .align 2, 0
-_08044EC0: .4byte gTasks
-_08044EC4: .4byte REG_BLDALPHA
-_08044EC8: .4byte sub_8044ECC
- thumb_func_end sub_8044E74
-
- thumb_func_start sub_8044ECC
-sub_8044ECC: @ 8044ECC
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r6, _08044F44 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r4, r0, 3
- adds r1, r4, r6
- ldrh r0, [r1, 0x26]
- subs r0, 0x1
- movs r5, 0
- strh r0, [r1, 0x26]
- lsls r0, 16
- asrs r2, r0, 16
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- bne _08044F4C
- ldrb r3, [r1, 0xA]
- adds r0, r6, 0
- adds r0, 0xE
- adds r2, r4, r0
-_08044EFA:
- mov r0, sp
- adds r1, r0, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044EFA
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r4, _08044F48 @ =gSprites
- adds r0, r4
- bl DestroySpriteAndFreeResources
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySpriteAndFreeResources
- movs r5, 0x1
-_08044F2A:
- mov r1, sp
- adds r0, r1, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044F2A
- b _08044F62
- .align 2, 0
-_08044F44: .4byte gTasks
-_08044F48: .4byte gSprites
-_08044F4C:
- movs r0, 0x3
- negs r0, r0
- cmp r2, r0
- bne _08044F62
- ldr r0, _08044F6C @ =REG_BLDCNT
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- adds r0, r3, 0
- bl DestroyTask
-_08044F62:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08044F6C: .4byte REG_BLDCNT
- thumb_func_end sub_8044ECC
-
- thumb_func_start sub_8044F70
-sub_8044F70: @ 8044F70
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- ldr r7, _08044FA4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r6, r0, 3
- adds r3, r6, r7
- ldrh r0, [r3, 0x26]
- subs r2, r0, 0x1
- movs r5, 0
- strh r2, [r3, 0x26]
- lsls r0, r2, 16
- asrs r1, r0, 16
- cmp r1, 0
- blt _08044FAC
- ldr r1, _08044FA8 @ =REG_BLDALPHA
- movs r0, 0x10
- subs r0, r2
- lsls r0, 8
- orrs r2, r0
- strh r2, [r1]
- b _08045022
- .align 2, 0
-_08044FA4: .4byte gTasks
-_08044FA8: .4byte REG_BLDALPHA
-_08044FAC:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0804500C
- ldrb r3, [r3, 0xA]
- movs r5, 0
- adds r0, r7, 0
- adds r0, 0xE
- adds r2, r6, r0
-_08044FBE:
- mov r0, sp
- adds r1, r0, r5
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044FBE
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r4, _08045008 @ =gSprites
- adds r0, r4
- bl DestroySpriteAndFreeResources
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySpriteAndFreeResources
- movs r5, 0x1
-_08044FEE:
- mov r1, sp
- adds r0, r1, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- adds r5, 0x1
- cmp r5, 0x5
- ble _08044FEE
- b _08045022
- .align 2, 0
-_08045008: .4byte gSprites
-_0804500C:
- movs r0, 0x3
- negs r0, r0
- cmp r1, r0
- bne _08045022
- ldr r0, _0804502C @ =REG_BLDCNT
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- adds r0, r4, 0
- bl DestroyTask
-_08045022:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0804502C: .4byte REG_BLDCNT
- thumb_func_end sub_8044F70
-
- thumb_func_start sub_8045030
-sub_8045030: @ 8045030
- push {lr}
- adds r1, r0, 0
- ldrh r2, [r1, 0x24]
- movs r3, 0x24
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08045044
- ldrh r0, [r1, 0x2E]
- adds r0, r2, r0
- strh r0, [r1, 0x24]
-_08045044:
- pop {r0}
- bx r0
- thumb_func_end sub_8045030
-
- thumb_func_start sub_8045048
-sub_8045048: @ 8045048
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- adds r1, r0, 0
- adds r1, 0x20
- strh r1, [r2, 0x30]
- movs r3, 0x2E
- ldrsh r0, [r2, r3]
- cmp r0, 0
- ble _08045066
- lsls r0, r1, 16
- asrs r0, 20
- ldrh r1, [r2, 0x24]
- adds r0, r1
- b _0804506E
-_08045066:
- lsls r1, 16
- asrs r1, 20
- ldrh r0, [r2, 0x24]
- subs r0, r1
-_0804506E:
- strh r0, [r2, 0x24]
- ldrh r1, [r2, 0x30]
- movs r0, 0xF
- ands r0, r1
- strh r0, [r2, 0x30]
- pop {r0}
- bx r0
- thumb_func_end sub_8045048
-
- thumb_func_start sub_804507C
-sub_804507C: @ 804507C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _08045090
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- b _08045106
-_08045090:
- ldrh r0, [r4, 0x32]
- lsls r0, 24
- lsrs r3, r0, 24
- ldrh r2, [r4, 0x34]
- adds r0, r2, 0
- adds r0, 0x38
- lsls r1, r0, 16
- lsrs r2, r1, 16
- ldr r0, _080450C0 @ =0x0000fff0
- ands r2, r0
- strh r2, [r4, 0x34]
- cmp r3, 0
- beq _080450C4
- lsrs r0, r1, 20
- ldrh r1, [r4, 0x24]
- adds r0, r1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- ble _080450D4
- movs r0, 0
- strh r0, [r4, 0x24]
- b _080450D4
- .align 2, 0
-_080450C0: .4byte 0x0000fff0
-_080450C4:
- lsrs r1, 20
- ldrh r0, [r4, 0x24]
- subs r0, r1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- bge _080450D4
- strh r3, [r4, 0x24]
-_080450D4:
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _08045106
- movs r1, 0x3F
- cmp r3, 0
- beq _080450E4
- movs r1, 0xC0
-_080450E4:
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080450F8
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x74
- bl PlaySE2WithPanning
- b _08045102
-_080450F8:
- lsls r1, 24
- asrs r1, 24
- movs r0, 0x73
- bl PlaySE1WithPanning
-_08045102:
- ldr r0, _0804510C @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_08045106:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804510C: .4byte SpriteCallbackDummy
- thumb_func_end sub_804507C
-
- thumb_func_start sub_8045110
-sub_8045110: @ 8045110
- push {r4,lr}
- adds r3, r0, 0
- ldrh r1, [r3, 0x30]
- movs r2, 0x30
- ldrsh r0, [r3, r2]
- cmp r0, 0
- ble _08045124
- subs r0, r1, 0x1
- strh r0, [r3, 0x30]
- b _08045174
-_08045124:
- ldrh r0, [r3, 0x32]
- lsls r0, 24
- ldrh r2, [r3, 0x34]
- adds r1, r2, 0
- adds r1, 0x38
- lsls r4, r1, 16
- lsrs r2, r4, 16
- ldr r1, _08045144 @ =0x0000fff0
- ands r2, r1
- strh r2, [r3, 0x34]
- cmp r0, 0
- beq _08045148
- lsrs r0, r4, 20
- ldrh r1, [r3, 0x24]
- adds r0, r1
- b _0804514E
- .align 2, 0
-_08045144: .4byte 0x0000fff0
-_08045148:
- lsrs r1, r4, 20
- ldrh r0, [r3, 0x24]
- subs r0, r1
-_0804514E:
- strh r0, [r3, 0x24]
- movs r2, 0x24
- ldrsh r0, [r3, r2]
- movs r2, 0x20
- ldrsh r1, [r3, r2]
- adds r0, r1
- adds r0, 0x8
- movs r1, 0x80
- lsls r1, 1
- cmp r0, r1
- bls _08045174
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0804517C @ =SpriteCallbackDummy
- str r0, [r3, 0x1C]
-_08045174:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804517C: .4byte SpriteCallbackDummy
- thumb_func_end sub_8045110
-
- thumb_func_start sub_8045180
-sub_8045180: @ 8045180
- ldrh r2, [r0, 0x2E]
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _0804519C @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrh r2, [r1, 0x24]
- strh r2, [r0, 0x24]
- ldrh r1, [r1, 0x26]
- strh r1, [r0, 0x26]
- bx lr
- .align 2, 0
-_0804519C: .4byte gSprites
- thumb_func_end sub_8045180
-
- thumb_func_start sub_80451A0
-sub_80451A0: @ 80451A0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- adds r7, r1, 0
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r4, _08045238 @ =gUnknown_020238CC
- ldr r1, _0804523C @ =gUnknown_0820A8B0
- adds r0, r4, 0
- bl StringCopy
- adds r0, r7, 0
- movs r1, 0x2
- mov r2, sp
- bl GetMonData
- mov r0, sp
- bl StringGetEnd10
- adds r4, 0x3
- adds r0, r4, 0
- mov r1, sp
- bl StringCopy
- adds r5, r0, 0
- movs r1, 0xFC
- strb r1, [r5]
- movs r0, 0x3
- strb r0, [r5, 0x1]
- movs r0, 0x2
- strb r0, [r5, 0x2]
- strb r1, [r5, 0x3]
- movs r0, 0x1
- strb r0, [r5, 0x4]
- adds r5, 0x5
- adds r0, r7, 0
- bl GetMonGender
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r7, 0
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- movs r1, 0x3
- bl GetMonData
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- mov r1, sp
- bl sub_8040D3C
- cmp r0, 0
- beq _08045222
- movs r6, 0x64
-_08045222:
- cmp r6, 0
- beq _08045240
- cmp r6, 0xFE
- beq _08045248
- movs r0, 0xB
- strb r0, [r5]
- movs r0, 0xFF
- strb r0, [r5, 0x1]
- adds r5, 0x1
- b _08045256
- .align 2, 0
-_08045238: .4byte gUnknown_020238CC
-_0804523C: .4byte gUnknown_0820A8B0
-_08045240:
- movs r0, 0xB
- strb r0, [r5]
- movs r0, 0xB5
- b _0804524E
-_08045248:
- movs r0, 0xA
- strb r0, [r5]
- movs r0, 0xB6
-_0804524E:
- strb r0, [r5, 0x1]
- movs r0, 0xFF
- strb r0, [r5, 0x2]
- adds r5, 0x2
-_08045256:
- movs r0, 0xFC
- strb r0, [r5]
- movs r0, 0x13
- strb r0, [r5, 0x1]
- movs r0, 0x37
- strb r0, [r5, 0x2]
- movs r0, 0xFF
- strb r0, [r5, 0x3]
- ldr r1, _080452D8 @ =gSprites
- mov r0, r9
- lsls r4, r0, 4
- adds r0, r4, r0
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 7
- ldr r2, _080452DC @ =0x02000520
- adds r5, r1, r2
- ldr r0, _080452E0 @ =gUnknown_020238CC
- mov r8, r0
- adds r0, r5, 0
- mov r1, r8
- bl sub_80034D4
- movs r6, 0
- movs r1, 0x7
- mov r10, r1
- adds r0, r7, 0
- movs r1, 0x3
- bl GetMonData
- str r4, [sp, 0xC]
- cmp r0, 0x1
- bne _08045338
- adds r0, r7, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _08045338
- mov r4, r8
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _08045338
- adds r7, r5, 0
-_080452C2:
- cmp r1, 0xFC
- bne _080452E4
- ldrb r0, [r4, 0x1]
- bl GetExtCtrlCodeLength
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- adds r4, r0
- b _08045330
- .align 2, 0
-_080452D8: .4byte gSprites
-_080452DC: .4byte 0x02000520
-_080452E0: .4byte gUnknown_020238CC
-_080452E4:
- adds r0, r1, 0
- subs r0, 0x37
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bls _080452FC
- adds r0, r1, 0
- adds r0, 0x79
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _08045300
-_080452FC:
- movs r0, 0x2C
- b _0804531E
-_08045300:
- adds r0, r1, 0
- subs r0, 0x4B
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _08045318
- adds r0, r1, 0
- adds r0, 0x65
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _0804531C
-_08045318:
- movs r0, 0x2D
- b _0804531E
-_0804531C:
- movs r0, 0x2B
-_0804531E:
- bl sub_8043CDC
- adds r1, r7, 0
- ldr r2, _080453C8 @ =REG_BG0CNT
- bl CpuSet
- adds r7, 0x40
- adds r6, 0x1
- adds r4, 0x1
-_08045330:
- ldrb r1, [r4]
- adds r0, r1, 0
- cmp r0, 0xFF
- bne _080452C2
-_08045338:
- cmp r6, r10
- bge _0804535A
- lsls r0, r6, 6
- adds r4, r0, r5
- mov r2, r10
- subs r6, r2, r6
-_08045344:
- movs r0, 0x2B
- bl sub_8043CDC
- adds r1, r4, 0
- ldr r2, _080453C8 @ =REG_BG0CNT
- bl CpuSet
- adds r4, 0x40
- subs r6, 0x1
- cmp r6, 0
- bne _08045344
-_0804535A:
- ldr r1, _080453CC @ =gSprites
- ldr r0, [sp, 0xC]
- add r0, r9
- lsls r0, 2
- adds r6, r0, r1
- ldrh r0, [r6, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080453D4
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- bne _080453D4
- ldr r1, _080453D0 @ =gUnknown_0820A8B4
- mov r0, r10
- cmp r0, 0
- beq _08045438
- mov r8, r6
- mov r9, r1
- ldr r7, _080453C8 @ =REG_BG0CNT
- mov r6, r10
-_0804538E:
- mov r1, r9
- adds r1, 0x4
- mov r9, r1
- subs r1, 0x4
- ldm r1!, {r4}
- mov r2, r8
- ldrh r0, [r2, 0x4]
- lsls r0, 22
- lsrs r0, 17
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- movs r0, 0x80
- lsls r0, 1
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- subs r6, 0x1
- cmp r6, 0
- bne _0804538E
- b _08045438
- .align 2, 0
-_080453C8: .4byte REG_BG0CNT
-_080453CC: .4byte gSprites
-_080453D0: .4byte gUnknown_0820A8B4
-_080453D4:
- ldr r1, _08045448 @ =gSprites
- ldr r0, [sp, 0xC]
- add r0, r9
- lsls r0, 2
- adds r4, r0, r1
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_side_get_owner
- lsls r0, 24
- ldr r1, _0804544C @ =gUnknown_0820A8DC
- cmp r0, 0
- bne _080453F2
- ldr r1, _08045450 @ =gUnknown_0820A904
-_080453F2:
- mov r2, r10
- cmp r2, 0
- beq _08045438
- mov r8, r4
- mov r9, r1
- ldr r7, _08045454 @ =REG_BG0CNT
- mov r6, r10
-_08045400:
- mov r0, r9
- adds r0, 0x4
- mov r9, r0
- subs r0, 0x4
- ldm r0!, {r4}
- mov r1, r8
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 17
- adds r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- movs r2, 0x80
- lsls r2, 1
- adds r4, r2
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r7, 0
- bl CpuSet
- adds r5, 0x20
- subs r6, 0x1
- cmp r6, 0
- bne _08045400
-_08045438:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045448: .4byte gSprites
-_0804544C: .4byte gUnknown_0820A8DC
-_08045450: .4byte gUnknown_0820A904
-_08045454: .4byte REG_BG0CNT
- thumb_func_end sub_80451A0
-
- thumb_func_start sub_8045458
-sub_8045458: @ 8045458
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- ldr r0, _080454F4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0804552E
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0804552E
- ldr r6, _080454F8 @ =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r5, r0, r6
- ldrh r0, [r5, 0x3A]
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- beq _0804552E
- ldr r1, _080454FC @ =gUnknown_02024A6A
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08045500 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl sub_8090D90
- lsls r0, 24
- cmp r0, 0
- beq _0804552E
- ldrh r0, [r5, 0x38]
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r7, 0
- beq _0804550C
- movs r0, 0x46
- bl sub_8043CDC
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r6
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r2, 0x80
- lsls r2, 1
- adds r1, r2
- ldr r2, _08045504 @ =0x06010000
- adds r1, r2
- ldr r2, _08045508 @ =REG_BG0CNT
- bl CpuSet
- b _0804552E
- .align 2, 0
-_080454F4: .4byte gBattleTypeFlags
-_080454F8: .4byte gSprites
-_080454FC: .4byte gUnknown_02024A6A
-_08045500: .4byte gEnemyParty
-_08045504: .4byte 0x06010000
-_08045508: .4byte REG_BG0CNT
-_0804550C:
- str r7, [sp]
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r6
- ldrh r1, [r0, 0x4]
- lsls r1, 22
- lsrs r1, 17
- movs r0, 0x80
- lsls r0, 1
- adds r1, r0
- ldr r0, _08045538 @ =0x06010000
- adds r1, r0
- ldr r2, _0804553C @ =0x05000008
- mov r0, sp
- bl CpuSet
-_0804552E:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045538: .4byte 0x06010000
-_0804553C: .4byte 0x05000008
- thumb_func_end sub_8045458
-
- thumb_func_start draw_status_ailment_maybe
-draw_status_ailment_maybe: @ 8045540
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, _080455A4 @ =gSprites
- mov r2, r9
- lsls r1, r2, 4
- add r1, r9
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1, 0x3A]
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r1, 0x38]
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- adds r0, r7, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _080455B0
- ldr r1, _080455A8 @ =gUnknown_02024A6A
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080455AC @ =gPlayerParty
- adds r0, r1
- movs r1, 0x37
- bl GetMonData
- adds r4, r0, 0
- bl IsDoubleBattle
- lsls r0, 24
- movs r3, 0x12
- mov r8, r3
- cmp r0, 0
- bne _080455CC
- movs r0, 0x1A
- mov r8, r0
- b _080455CC
- .align 2, 0
-_080455A4: .4byte gSprites
-_080455A8: .4byte gUnknown_02024A6A
-_080455AC: .4byte gPlayerParty
-_080455B0:
- ldr r1, _080455EC @ =gUnknown_02024A6A
- lsls r0, r7, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _080455F0 @ =gEnemyParty
- adds r0, r1
- movs r1, 0x37
- bl GetMonData
- adds r4, r0, 0
- movs r1, 0x11
- mov r8, r1
-_080455CC:
- movs r0, 0x7
- ands r0, r4
- cmp r0, 0
- beq _080455F4
- movs r0, 0x1B
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x2
- b _080456FC
- .align 2, 0
-_080455EC: .4byte gUnknown_02024A6A
-_080455F0: .4byte gEnemyParty
-_080455F4:
- movs r0, 0x88
- ands r0, r4
- cmp r0, 0
- beq _08045612
- movs r0, 0x15
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0
- b _080456FC
-_08045612:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _08045630
- movs r0, 0x21
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x4
- b _080456FC
-_08045630:
- movs r0, 0x20
- ands r0, r4
- cmp r0, 0
- beq _0804564E
- movs r0, 0x1E
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x3
- b _080456FC
-_0804564E:
- movs r0, 0x40
- ands r0, r4
- cmp r0, 0
- beq _0804566C
- movs r0, 0x18
- adds r1, r7, 0
- bl sub_80457E8
- lsls r0, 24
- lsrs r0, 24
- bl sub_8043CDC
- adds r6, r0, 0
- movs r0, 0x1
- b _080456FC
-_0804566C:
- movs r0, 0x27
- bl sub_8043CDC
- adds r6, r0, 0
- movs r4, 0
- mov r2, r9
- lsls r0, r2, 4
- mov r3, r8
- lsls r3, 16
- mov r8, r3
- lsls r7, 2
- ldr r1, _080456E8 @ =gSprites
- add r0, r9
- lsls r0, 2
- adds r5, r0, r1
-_0804568A:
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- mov r2, r8
- asrs r0, r2, 16
- adds r1, r0
- adds r1, r4
- lsls r1, 5
- ldr r3, _080456EC @ =0x06010000
- adds r1, r3
- adds r0, r6, 0
- ldr r2, _080456F0 @ =REG_BG0CNT
- bl CpuSet
- adds r4, 0x1
- cmp r4, 0x2
- ble _0804568A
- ldr r0, _080456F4 @ =0x02017800
- adds r0, r7, r0
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _080456DC
- movs r0, 0x1
- bl sub_8043CDC
- ldr r2, _080456E8 @ =gSprites
- mov r3, r10
- lsls r1, r3, 4
- add r1, r10
- lsls r1, 2
- adds r1, r2
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r2, _080456EC @ =0x06010000
- adds r1, r2
- ldr r2, _080456F8 @ =REG_BG0HOFS
- bl CpuSet
-_080456DC:
- mov r0, r9
- movs r1, 0x1
- bl sub_8045458
- b _080457BA
- .align 2, 0
-_080456E8: .4byte gSprites
-_080456EC: .4byte 0x06010000
-_080456F0: .4byte REG_BG0CNT
-_080456F4: .4byte 0x02017800
-_080456F8: .4byte REG_BG0HOFS
-_080456FC:
- mov r1, r9
- lsls r5, r1, 4
- add r5, r9
- lsls r5, 2
- ldr r2, _080457C8 @ =gSprites
- adds r5, r2
- ldrb r4, [r5, 0x5]
- lsrs r4, 4
- lsls r4, 4
- adds r4, 0xC
- adds r4, r7
- lsls r0, 1
- ldr r1, _080457CC @ =gBattleInterfaceStatusIcons_DynPal
- adds r0, r1
- ldrh r0, [r0]
- movs r3, 0x80
- lsls r3, 1
- adds r1, r4, r3
- movs r2, 0x2
- bl FillPalette
- lsls r4, 1
- ldr r0, _080457D0 @ =gPlttBufferUnfaded + 0x200
- adds r0, r4, r0
- ldr r1, _080457D4 @ =0x05000200
- adds r4, r1
- adds r1, r4, 0
- movs r2, 0x1
- bl CpuSet
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- add r1, r8
- lsls r1, 5
- ldr r2, _080457D8 @ =0x06010000
- mov r8, r2
- add r1, r8
- ldr r2, _080457DC @ =REG_BG2HOFS
- adds r0, r6, 0
- bl CpuSet
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0804576A
- adds r0, r7, 0
- bl battle_side_get_owner
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080457B2
-_0804576A:
- lsls r0, r7, 2
- ldr r1, _080457E0 @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _080457B2
- movs r0, 0
- bl sub_8043CDC
- mov r3, r10
- lsls r4, r3, 4
- add r4, r10
- lsls r4, 2
- ldr r1, _080457C8 @ =gSprites
- adds r4, r1
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- add r1, r8
- ldr r5, _080457E4 @ =REG_BG0CNT
- adds r2, r5, 0
- bl CpuSet
- movs r0, 0x41
- bl sub_8043CDC
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- adds r1, 0x20
- add r1, r8
- adds r2, r5, 0
- bl CpuSet
-_080457B2:
- mov r0, r9
- movs r1, 0
- bl sub_8045458
-_080457BA:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080457C8: .4byte gSprites
-_080457CC: .4byte gBattleInterfaceStatusIcons_DynPal
-_080457D0: .4byte gPlttBufferUnfaded + 0x200
-_080457D4: .4byte 0x05000200
-_080457D8: .4byte 0x06010000
-_080457DC: .4byte REG_BG2HOFS
-_080457E0: .4byte 0x02017800
-_080457E4: .4byte REG_BG0CNT
- thumb_func_end draw_status_ailment_maybe
-
- thumb_func_start sub_80457E8
-sub_80457E8: @ 80457E8
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsrs r2, r0, 24
- adds r0, r2, 0
- subs r0, 0x15
- cmp r0, 0xC
- bhi _080458A8
- lsls r0, 2
- ldr r1, _08045804 @ =_08045808
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08045804: .4byte _08045808
- .align 2, 0
-_08045808:
- .4byte _0804583C
- .4byte _080458A8
- .4byte _080458A8
- .4byte _08045852
- .4byte _080458A8
- .4byte _080458A8
- .4byte _08045868
- .4byte _080458A8
- .4byte _080458A8
- .4byte _0804587E
- .4byte _080458A8
- .4byte _080458A8
- .4byte _08045894
-_0804583C:
- movs r2, 0x15
- cmp r3, 0
- beq _080458A8
- movs r2, 0x47
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x65
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x56
- b _080458A8
-_08045852:
- movs r2, 0x18
- cmp r3, 0
- beq _080458A8
- movs r2, 0x4A
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x68
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x59
- b _080458A8
-_08045868:
- movs r2, 0x1B
- cmp r3, 0
- beq _080458A8
- movs r2, 0x4D
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x6B
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x5C
- b _080458A8
-_0804587E:
- movs r2, 0x1E
- cmp r3, 0
- beq _080458A8
- movs r2, 0x50
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x6E
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x5F
- b _080458A8
-_08045894:
- movs r2, 0x21
- cmp r3, 0
- beq _080458A8
- movs r2, 0x53
- cmp r3, 0x1
- beq _080458A8
- movs r2, 0x71
- cmp r3, 0x2
- bne _080458A8
- movs r2, 0x62
-_080458A8:
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80457E8
-
- thumb_func_start sub_80458B0
-sub_80458B0: @ 80458B0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08045984 @ =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 7
- ldr r0, _08045988 @ =0x02000520
- adds r6, r1, r0
- movs r1, 0x7
- mov r8, r1
- ldr r1, _0804598C @ =gUnknown_08400DD6
- adds r0, r6, 0
- bl sub_80034D4
- movs r4, 0
-_080458EE:
- movs r0, 0x2B
- bl sub_8043CDC
- lsls r1, r4, 6
- adds r1, r6, r1
- ldr r2, _08045990 @ =REG_BG0CNT
- bl CpuSet
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r8
- bcc _080458EE
- movs r7, 0x3
- movs r2, 0x3
- add r2, r8
- mov r9, r2
- cmp r7, r9
- bge _08045974
- ldr r1, _08045984 @ =gSprites
- ldr r0, _08045990 @ =REG_BG0CNT
- mov r10, r0
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r1
- mov r8, r0
-_08045924:
- mov r1, r8
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r5, r7, 0
- cmp r7, 0
- bge _08045934
- adds r5, r7, 0x7
-_08045934:
- asrs r5, 3
- lsls r4, r5, 3
- subs r4, r7, r4
- adds r0, r4
- lsls r5, 6
- adds r0, r5
- lsls r0, 5
- ldr r2, _08045994 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- mov r1, r8
- ldrh r0, [r1, 0x4]
- lsls r0, 22
- lsrs r0, 22
- adds r4, 0x8
- adds r0, r4
- adds r0, r5
- lsls r0, 5
- ldr r2, _08045994 @ =0x06010000
- adds r1, r0, r2
- adds r0, r6, 0
- mov r2, r10
- bl CpuSet
- adds r6, 0x20
- adds r7, 0x1
- cmp r7, r9
- blt _08045924
-_08045974:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045984: .4byte gSprites
-_08045988: .4byte 0x02000520
-_0804598C: .4byte gUnknown_08400DD6
-_08045990: .4byte REG_BG0CNT
-_08045994: .4byte 0x06010000
- thumb_func_end sub_80458B0
-
- thumb_func_start sub_8045998
-sub_8045998: @ 8045998
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08045A38 @ =gUnknown_020238CC
- mov r8, r0
- ldr r1, _08045A3C @ =gUnknown_08400DE6
- bl StringCopy
- adds r7, r0, 0
- ldr r0, _08045A40 @ =gNumSafariBalls
- ldrb r1, [r0]
- adds r0, r7, 0
- movs r2, 0xA
- movs r3, 0x1
- bl sub_8003504
- adds r7, r0, 0
- ldr r1, _08045A44 @ =gUnknown_08400DF0
- bl StringAppend
- ldr r0, _08045A48 @ =gSprites
- lsls r5, r4, 4
- adds r5, r4
- lsls r5, 2
- adds r5, r0
- ldrh r0, [r5, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- bl battle_get_per_side_status
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 1
- adds r4, r0
- lsls r4, 7
- ldr r0, _08045A4C @ =0x02000520
- adds r7, r4, r0
- movs r6, 0x5
- adds r0, r7, 0
- mov r1, r8
- bl sub_80034D4
- ldr r0, _08045A50 @ =0x02000540
- adds r7, r4, r0
- movs r4, 0x6
-_080459F8:
- ldrh r0, [r5, 0x4]
- lsls r0, 22
- lsrs r2, r0, 22
- adds r0, r4, 0
- cmp r4, 0
- bge _08045A06
- adds r0, r4, 0x7
-_08045A06:
- asrs r0, 3
- lsls r1, r0, 3
- subs r1, r4, r1
- adds r1, 0x18
- adds r1, r2, r1
- lsls r0, 6
- adds r1, r0
- lsls r1, 5
- ldr r0, _08045A54 @ =0x06010000
- adds r1, r0
- adds r0, r7, 0
- ldr r2, _08045A58 @ =REG_BG0CNT
- bl CpuSet
- adds r7, 0x40
- adds r4, 0x1
- adds r0, r6, 0x6
- cmp r4, r0
- blt _080459F8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045A38: .4byte gUnknown_020238CC
-_08045A3C: .4byte gUnknown_08400DE6
-_08045A40: .4byte gNumSafariBalls
-_08045A44: .4byte gUnknown_08400DF0
-_08045A48: .4byte gSprites
-_08045A4C: .4byte 0x02000520
-_08045A50: .4byte 0x02000540
-_08045A54: .4byte 0x06010000
-_08045A58: .4byte REG_BG0CNT
- thumb_func_end sub_8045998
-
- thumb_func_start sub_8045A5C
-sub_8045A5C: @ 8045A5C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r1, _08045BE4 @ =gSprites
- lsls r0, 4
- add r0, r8
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- beq _08045A92
- b _08045BF0
-_08045A92:
- cmp r7, 0x3
- beq _08045A9A
- cmp r7, 0
- bne _08045AAE
-_08045A9A:
- mov r0, r9
- movs r1, 0x38
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_8043FC0
-_08045AAE:
- cmp r7, 0x1
- bhi _08045AC8
- mov r0, r9
- movs r1, 0x39
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- mov r0, r8
- movs r2, 0
- bl sub_80440EC
-_08045AC8:
- cmp r7, 0x2
- beq _08045AD0
- cmp r7, 0
- bne _08045AE6
-_08045AD0:
- mov r0, r9
- movs r1, 0x3A
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- asrs r1, 16
- mov r0, r8
- movs r2, 0x1
- bl sub_80440EC
-_08045AE6:
- cmp r7, 0x5
- beq _08045AEE
- cmp r7, 0
- bne _08045B22
-_08045AEE:
- movs r0, 0
- bl load_gfxc_health_bar
- mov r0, r9
- movs r1, 0x3A
- bl GetMonData
- adds r4, r0, 0
- mov r0, r9
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- movs r0, 0
- str r0, [sp]
- mov r0, r10
- mov r1, r8
- adds r2, r4, 0
- bl sub_8043D84
- mov r0, r10
- mov r1, r8
- movs r2, 0
- movs r3, 0
- bl sub_8045C78
-_08045B22:
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- cmp r0, 0
- bne _08045BA6
- cmp r7, 0x6
- beq _08045B38
- cmp r7, 0
- bne _08045BA6
-_08045B38:
- movs r0, 0x3
- bl load_gfxc_health_bar
- mov r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- mov r0, r9
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r0, r9
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, _08045BE8 @ =gExperienceTables
- lsls r1, r4, 2
- ldr r2, _08045BEC @ =gBaseStats
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r2
- adds r1, r0
- adds r1, r6
- ldr r1, [r1]
- subs r3, r1
- adds r4, 0x1
- lsls r4, 2
- adds r4, r0
- adds r4, r6
- ldr r2, [r4]
- subs r2, r1
- ldr r0, [sp, 0x4]
- str r0, [sp]
- mov r0, r10
- mov r1, r8
- bl sub_8043D84
- mov r0, r10
- mov r1, r8
- movs r2, 0x1
- movs r3, 0
- bl sub_8045C78
-_08045BA6:
- cmp r7, 0x4
- beq _08045BAE
- cmp r7, 0
- bne _08045BB6
-_08045BAE:
- mov r0, r8
- mov r1, r9
- bl sub_80451A0
-_08045BB6:
- cmp r7, 0x9
- beq _08045BBE
- cmp r7, 0
- bne _08045BC4
-_08045BBE:
- mov r0, r8
- bl draw_status_ailment_maybe
-_08045BC4:
- cmp r7, 0xA
- bne _08045BCE
- mov r0, r8
- bl sub_80458B0
-_08045BCE:
- adds r0, r7, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _08045C66
- mov r0, r8
- bl sub_8045998
- b _08045C66
- .align 2, 0
-_08045BE4: .4byte gSprites
-_08045BE8: .4byte gExperienceTables
-_08045BEC: .4byte gBaseStats
-_08045BF0:
- cmp r7, 0x3
- beq _08045BF8
- cmp r7, 0
- bne _08045C0C
-_08045BF8:
- mov r0, r9
- movs r1, 0x38
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_8043FC0
-_08045C0C:
- cmp r7, 0x5
- beq _08045C14
- cmp r7, 0
- bne _08045C48
-_08045C14:
- movs r0, 0
- bl load_gfxc_health_bar
- mov r0, r9
- movs r1, 0x3A
- bl GetMonData
- adds r4, r0, 0
- mov r0, r9
- movs r1, 0x39
- bl GetMonData
- adds r3, r0, 0
- movs r0, 0
- str r0, [sp]
- mov r0, r10
- mov r1, r8
- adds r2, r4, 0
- bl sub_8043D84
- mov r0, r10
- mov r1, r8
- movs r2, 0
- movs r3, 0
- bl sub_8045C78
-_08045C48:
- cmp r7, 0x4
- beq _08045C50
- cmp r7, 0
- bne _08045C58
-_08045C50:
- mov r0, r8
- mov r1, r9
- bl sub_80451A0
-_08045C58:
- cmp r7, 0x9
- beq _08045C60
- cmp r7, 0
- bne _08045C66
-_08045C60:
- mov r0, r8
- bl draw_status_ailment_maybe
-_08045C66:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8045A5C
-
- thumb_func_start sub_8045C78
-sub_8045C78: @ 8045C78
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- cmp r2, 0
- bne _08045CBC
- lsls r5, r7, 2
- adds r3, r5, r7
- lsls r3, 2
- ldr r4, _08045CB8 @ =0x02017850
- adds r2, r3, r4
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- ldr r2, [r2, 0xC]
- adds r4, 0x10
- adds r3, r4
- movs r4, 0x6
- str r4, [sp]
- movs r4, 0x1
- str r4, [sp, 0x4]
- bl sub_8045F58
- adds r6, r0, 0
- adds r4, r5, 0
- b _08045D0A
- .align 2, 0
-_08045CB8: .4byte 0x02017850
-_08045CBC:
- lsls r4, r7, 2
- adds r0, r4, r7
- lsls r0, 2
- mov r10, r0
- ldr r6, _08045D50 @ =0x02017850
- add r6, r10
- ldr r0, [r6, 0x8]
- ldr r1, [r6, 0xC]
- ldr r2, [r6, 0x4]
- movs r3, 0x8
- bl GetScaledExpFraction
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _08045CDE
- movs r5, 0x1
-_08045CDE:
- ldr r0, [r6, 0xC]
- mov r8, r0
- adds r1, r5, 0
- bl __divsi3
- cmp r0, 0
- bge _08045CEE
- negs r0, r0
-_08045CEE:
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, [r6, 0x4]
- ldr r1, [r6, 0x8]
- ldr r3, _08045D50 @ =0x02017850
- adds r3, 0x10
- add r3, r10
- movs r2, 0x8
- str r2, [sp]
- str r5, [sp, 0x4]
- mov r2, r8
- bl sub_8045F58
- adds r6, r0, 0
-_08045D0A:
- mov r0, r9
- cmp r0, 0x1
- beq _08045D22
- cmp r0, 0
- bne _08045D2A
- ldr r0, _08045D54 @ =0x02017800
- adds r0, r4, r0
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08045D2A
-_08045D22:
- adds r0, r7, 0
- mov r1, r9
- bl sub_8045D58
-_08045D2A:
- movs r0, 0x1
- negs r0, r0
- cmp r6, r0
- bne _08045D3E
- adds r0, r4, r7
- lsls r0, 2
- ldr r1, _08045D50 @ =0x02017850
- adds r0, r1
- movs r1, 0
- str r1, [r0, 0x10]
-_08045D3E:
- adds r0, r6, 0
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08045D50: .4byte 0x02017850
-_08045D54: .4byte 0x02017800
- thumb_func_end sub_8045C78
-
- thumb_func_start sub_8045D58
-sub_8045D58: @ 8045D58
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0
- beq _08045D72
- cmp r1, 0x1
- beq _08045E54
- b _08045F42
-_08045D72:
- lsls r5, r6, 2
- adds r3, r5, r6
- lsls r3, 2
- ldr r4, _08045E00 @ =0x02017850
- adds r2, r3, r4
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- ldr r2, [r2, 0xC]
- adds r4, 0x10
- adds r3, r4
- add r4, sp, 0x8
- str r4, [sp]
- movs r4, 0x6
- str r4, [sp, 0x4]
- bl sub_804602C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- mov r8, r1
- adds r1, r5, 0
- cmp r0, 0x18
- bhi _08045DAC
- movs r2, 0x38
- mov r8, r2
- cmp r0, 0x9
- bls _08045DAC
- movs r4, 0x2F
- mov r8, r4
-_08045DAC:
- movs r5, 0
- ldr r7, _08045E04 @ =gSprites
- adds r0, r1, r6
- lsls r6, r0, 2
-_08045DB4:
- ldr r0, _08045E00 @ =0x02017850
- adds r0, r6, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- ldrh r0, [r0, 0x38]
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r5, 0x1
- bhi _08045E10
- mov r0, r8
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r2, r5, 0x2
- adds r1, r2
- lsls r1, 5
- ldr r2, _08045E08 @ =0x06010000
- adds r1, r2
- ldr r2, _08045E0C @ =REG_BG0CNT
- bl CpuSet
- b _08045E3E
- .align 2, 0
-_08045E00: .4byte 0x02017850
-_08045E04: .4byte gSprites
-_08045E08: .4byte 0x06010000
-_08045E0C: .4byte REG_BG0CNT
-_08045E10:
- mov r0, r8
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r1, r5, r1
- lsls r1, 5
- ldr r4, _08045E4C @ =0x06010040
- adds r1, r4
- ldr r2, _08045E50 @ =REG_BG0CNT
- bl CpuSet
-_08045E3E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _08045DB4
- b _08045F42
- .align 2, 0
-_08045E4C: .4byte 0x06010040
-_08045E50: .4byte REG_BG0CNT
-_08045E54:
- lsls r5, r6, 2
- adds r3, r5, r6
- lsls r3, 2
- ldr r4, _08045EF0 @ =0x02017850
- adds r2, r3, r4
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- ldr r2, [r2, 0xC]
- adds r4, 0x10
- adds r3, r4
- add r4, sp, 0x8
- str r4, [sp]
- movs r4, 0x8
- str r4, [sp, 0x4]
- bl sub_804602C
- ldr r1, _08045EF4 @ =gUnknown_02024A6A
- lsls r0, r6, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08045EF8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- lsls r0, 24
- lsrs r0, 24
- adds r1, r5, 0
- cmp r0, 0x64
- bne _08045EAA
- movs r5, 0
- movs r2, 0
-_08045E98:
- mov r0, sp
- adds r0, r5
- adds r0, 0x8
- strb r2, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _08045E98
-_08045EAA:
- movs r5, 0
- ldr r7, _08045EFC @ =gSprites
- adds r0, r1, r6
- lsls r0, 2
- ldr r1, _08045EF0 @ =0x02017850
- adds r4, r0, r1
-_08045EB6:
- cmp r5, 0x3
- bhi _08045F08
- movs r0, 0xC
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r2, r5, 0
- adds r2, 0x24
- adds r1, r2
- lsls r1, 5
- ldr r2, _08045F00 @ =0x06010000
- adds r1, r2
- ldr r2, _08045F04 @ =REG_BG0CNT
- bl CpuSet
- b _08045F38
- .align 2, 0
-_08045EF0: .4byte 0x02017850
-_08045EF4: .4byte gUnknown_02024A6A
-_08045EF8: .4byte gPlayerParty
-_08045EFC: .4byte gSprites
-_08045F00: .4byte 0x06010000
-_08045F04: .4byte REG_BG0CNT
-_08045F08:
- movs r0, 0xC
- bl sub_8043CDC
- mov r1, sp
- adds r1, r5
- adds r1, 0x8
- ldrb r1, [r1]
- lsls r1, 5
- adds r0, r1
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r7
- ldrh r1, [r1, 0x4]
- lsls r1, 22
- lsrs r1, 22
- adds r1, r5, r1
- lsls r1, 5
- ldr r2, _08045F50 @ =0x06010b80
- adds r1, r2
- ldr r2, _08045F54 @ =REG_BG0CNT
- bl CpuSet
-_08045F38:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x7
- bls _08045EB6
-_08045F42:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08045F50: .4byte 0x06010b80
-_08045F54: .4byte REG_BG0CNT
- thumb_func_end sub_8045D58
-
- thumb_func_start sub_8045F58
-sub_8045F58: @ 8045F58
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- adds r4, r1, 0
- mov r8, r2
- adds r5, r3, 0
- ldr r1, [sp, 0x18]
- ldr r0, [sp, 0x1C]
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 27
- lsrs r2, r1, 24
- ldr r1, [r5]
- ldr r0, _08045F84 @ =0xffff8000
- cmp r1, r0
- bne _08045F8A
- cmp r7, r2
- bge _08045F88
- lsls r0, r4, 8
- str r0, [r5]
- b _08045F8A
- .align 2, 0
-_08045F84: .4byte 0xffff8000
-_08045F88:
- str r4, [r5]
-_08045F8A:
- mov r0, r8
- subs r4, r0
- cmp r4, 0
- bge _08045F96
- movs r4, 0
- b _08045F9C
-_08045F96:
- cmp r4, r7
- ble _08045F9C
- adds r4, r7, 0
-_08045F9C:
- cmp r7, r2
- bge _08045FB8
- ldr r0, [r5]
- asrs r1, r0, 8
- adds r6, r0, 0
- cmp r4, r1
- bne _08045FC4
- movs r0, 0xFF
- ands r0, r6
- cmp r0, 0
- bne _08045FC4
- movs r0, 0x1
- negs r0, r0
- b _08046020
-_08045FB8:
- ldr r6, [r5]
- cmp r4, r6
- bne _08045FC4
- movs r0, 0x1
- negs r0, r0
- b _08046020
-_08045FC4:
- cmp r7, r2
- bge _08045FFE
- lsls r0, r7, 8
- adds r1, r2, 0
- bl __divsi3
- mov r1, r8
- cmp r1, 0
- bge _08045FE2
- adds r0, r6, r0
- str r0, [r5]
- asrs r2, r0, 8
- cmp r2, r4
- blt _0804601E
- b _08045FF6
-_08045FE2:
- subs r0, r6, r0
- str r0, [r5]
- asrs r2, r0, 8
- movs r1, 0xFF
- ands r0, r1
- cmp r0, 0
- ble _08045FF2
- adds r2, 0x1
-_08045FF2:
- cmp r2, r4
- bgt _0804601E
-_08045FF6:
- lsls r0, r4, 8
- str r0, [r5]
- adds r2, r4, 0
- b _0804601E
-_08045FFE:
- mov r0, r8
- cmp r0, 0
- bge _08046010
- ldr r0, [r5]
- adds r0, r3
- str r0, [r5]
- cmp r0, r4
- ble _0804601C
- b _0804601A
-_08046010:
- ldr r0, [r5]
- subs r0, r3
- str r0, [r5]
- cmp r0, r4
- bge _0804601C
-_0804601A:
- str r4, [r5]
-_0804601C:
- ldr r2, [r5]
-_0804601E:
- adds r0, r2, 0
-_08046020:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8045F58
-
- thumb_func_start sub_804602C
-sub_804602C: @ 804602C
- push {r4-r7,lr}
- adds r4, r0, 0
- mov r12, r3
- ldr r7, [sp, 0x14]
- ldr r0, [sp, 0x18]
- lsls r0, 24
- lsrs r6, r0, 24
- subs r5, r1, r2
- cmp r5, 0
- bge _08046044
- movs r5, 0
- b _0804604A
-_08046044:
- cmp r5, r4
- ble _0804604A
- adds r5, r4, 0
-_0804604A:
- lsls r0, r6, 27
- lsrs r3, r0, 24
- movs r1, 0
- cmp r1, r6
- bcs _08046064
- movs r2, 0
-_08046056:
- adds r0, r7, r1
- strb r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r6
- bcc _08046056
-_08046064:
- cmp r4, r3
- bge _08046078
- mov r1, r12
- ldr r0, [r1]
- muls r0, r3
- adds r1, r4, 0
- bl __divsi3
- asrs r0, 8
- b _08046084
-_08046078:
- mov r1, r12
- ldr r0, [r1]
- muls r0, r3
- adds r1, r4, 0
- bl __divsi3
-_08046084:
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- cmp r3, 0
- bne _0804609A
- cmp r5, 0
- ble _0804609A
- movs r0, 0x1
- strb r0, [r7]
- movs r3, 0x1
- b _080460BE
-_0804609A:
- movs r1, 0
- movs r4, 0x8
-_0804609E:
- cmp r1, r6
- bcs _080460BE
- cmp r2, 0x7
- bls _080460BA
- adds r0, r7, r1
- strb r4, [r0]
- adds r0, r2, 0
- subs r0, 0x8
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- b _0804609E
-_080460BA:
- adds r0, r7, r1
- strb r2, [r0]
-_080460BE:
- adds r0, r3, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_804602C
-
- thumb_func_start sub_80460C8
-sub_80460C8: @ 80460C8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r5, r0, 0
- adds r6, r1, 0
- adds r4, r2, 0
- mov r8, r3
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- ldr r2, [r5, 0x8]
- movs r3, 0x6
- str r3, [sp]
- movs r3, 0x1
- str r3, [sp, 0x4]
- adds r3, r6, 0
- bl sub_8045F58
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_8046128
- ldr r0, [r5]
- cmp r0, 0x2F
- bgt _08046108
- ldr r0, [r6]
- lsls r0, 8
- lsrs r1, r0, 16
- b _0804610A
-_08046108:
- ldrh r1, [r6]
-_0804610A:
- movs r2, 0
- ldrsh r0, [r5, r2]
- lsls r1, 16
- asrs r1, 16
- mov r2, r8
- bl sub_804373C
- lsls r0, r7, 16
- asrs r0, 16
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80460C8
-
- thumb_func_start sub_8046128
-sub_8046128: @ 8046128
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x1C
- adds r5, r0, 0
- adds r3, r1, 0
- mov r8, r2
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- ldr r2, [r5, 0x8]
- add r4, sp, 0x8
- str r4, [sp]
- movs r4, 0x6
- str r4, [sp, 0x4]
- bl sub_804602C
- movs r3, 0
- add r7, sp, 0x10
- mov r12, r7
- ldrb r0, [r5, 0xC]
- lsls r6, r0, 27
- ldr r4, [r5, 0x10]
-_08046154:
- lsls r2, r3, 1
- add r2, r12
- lsrs r1, r6, 15
- mov r0, sp
- adds r0, r3
- adds r0, 0x8
- ldrb r0, [r0]
- adds r0, r4, r0
- orrs r1, r0
- strh r1, [r2]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x5
- bls _08046154
- adds r0, r7, 0
- mov r1, r8
- movs r2, 0x6
- bl CpuSet
- add sp, 0x1C
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8046128
-
- thumb_func_start GetScaledExpFraction
-GetScaledExpFraction: @ 8046188
- push {r4-r7,lr}
- adds r6, r2, 0
- lsls r3, 27
- lsrs r7, r3, 24
- subs r5, r0, r1
- cmp r5, 0
- bge _0804619A
- movs r5, 0
- b _080461A0
-_0804619A:
- cmp r5, r6
- ble _080461A0
- adds r5, r6, 0
-_080461A0:
- muls r0, r7
- adds r1, r6, 0
- bl __divsi3
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- muls r0, r7
- adds r1, r6, 0
- bl __divsi3
- lsls r4, 24
- asrs r4, 24
- lsls r0, 24
- asrs r0, 24
- subs r0, r4, r0
- cmp r0, 0
- bge _080461C8
- negs r0, r0
-_080461C8:
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetScaledExpFraction
-
- thumb_func_start GetScaledHPFraction
-GetScaledHPFraction: @ 80461D4
- push {r4,lr}
- lsls r2, 24
- lsrs r2, 24
- lsls r0, 16
- asrs r4, r0, 16
- adds r0, r4, 0
- muls r0, r2
- lsls r1, 16
- asrs r1, 16
- bl __divsi3
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080461F8
- cmp r4, 0
- ble _080461F8
- movs r0, 0x1
-_080461F8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetScaledHPFraction
-
- thumb_func_start GetHPBarLevel
-GetHPBarLevel: @ 8046200
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- cmp r0, r1
- bne _08046212
- movs r0, 0x4
- b _0804622E
-_08046212:
- movs r2, 0x30
- bl GetScaledHPFraction
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0x3
- cmp r1, 0x18
- bhi _0804622E
- movs r0, 0x2
- cmp r1, 0x9
- bhi _0804622E
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
-_0804622E:
- pop {r1}
- bx r1
- thumb_func_end GetHPBarLevel
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/text/battle_strings.inc b/data/text/battle_strings.inc
index d1aca1dee..d0c8f74d5 100644
--- a/data/text/battle_strings.inc
+++ b/data/text/battle_strings.inc
@@ -1043,15 +1043,15 @@ BattleText_SpDef:
.string "SP. DEF$"
gUnknown_08400DD6:: @ 8400DD6
-BattleText_SafariBalls:
+BattleText_SafariBalls::
.string "{HIGHLIGHT RED}SAFARI BALLS$"
gUnknown_08400DE6:: @ 8400DE6
-BattleText_SafariBallsLeft:
+BattleText_SafariBallsLeft::
.string "{HIGHLIGHT RED}Left: $"
gUnknown_08400DF0:: @ 8400DF0
-BattleText_HighlightRed:
+BattleText_HighlightRed::
.string "{HIGHLIGHT RED}$"
BattleText_Sleep::
diff --git a/include/songs.h b/include/songs.h
index 01ecf9fe0..244bb9808 100644
--- a/include/songs.h
+++ b/include/songs.h
@@ -117,9 +117,9 @@ enum
SE_PN_OFF,
SE_Z_SEARCH,
SE_TAMAGO,
- SE_TB_START,
- SE_TB_KON,
- SE_TB_KARA,
+ /*0x72*/ SE_TB_START,
+ /*0x73*/ SE_TB_KON,
+ /*0x74*/ SE_TB_KARA,
SE_BIDORO,
SE_W085,
SE_W085B,
diff --git a/include/text.h b/include/text.h
index 4f52e3cdd..f01af1547 100644
--- a/include/text.h
+++ b/include/text.h
@@ -4,7 +4,10 @@
#define CHAR_SPACE 0x00
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_HYPHEN 0xAE
+#define CHAR_MALE 0xB5
+#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
+#define CHAR_SLASH 0xBA
#define CHAR_COLON 0xF0
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
@@ -155,7 +158,7 @@ u8 sub_8002F44(struct Window *win);
u8 sub_8003418(struct Window *win);
u8 sub_8003460(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top);
u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 top);
-void sub_80034D4(u8 *tileData, u8 *text);
+void sub_80034D4(u8 *tileData, const u8 *text);
u8 sub_80034EC(u8 *str);
u8 *sub_8003504(u8 *dest, s32 value, u8 alignAmount, u8 alignType);
u8 *sub_8003558(u8 *dest, const u8 *src, u8 alignAmount, u8 alignType);
diff --git a/ld_script.txt b/ld_script.txt
index 06d134243..91be5961f 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -75,7 +75,7 @@ SECTIONS {
asm/daycare.o(.text);
src/egg_hatch.o(.text);
asm/egg_hatch.o(.text);
- asm/battle_interface.o(.text);
+ src/battle_interface.o(.text);
src/smokescreen.o(.text);
asm/pokeball.o(.text);
src/load_save.o(.text);
diff --git a/src/battle_interface.c b/src/battle_interface.c
new file mode 100644
index 000000000..0c7097312
--- /dev/null
+++ b/src/battle_interface.c
@@ -0,0 +1,3076 @@
+#include "global.h"
+#include "asm.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "text.h"
+#include "decompress.h"
+#include "sound.h"
+#include "songs.h"
+#include "battle.h"
+#include "palette.h"
+
+struct UnknownStruct5
+{
+ u8 unk0;
+ u32 unk4;
+ u32 unk8;
+ u32 unkC;
+ u32 unk10;
+};
+
+struct UnknownStruct6
+{
+ u8 bit_0:1;
+ u8 bit_1:1;
+ u8 bit_2:1;
+ u8 bit_3:1;
+ u8 bit_4:1;
+ u8 bit_5:1;
+ u8 bit_6:1;
+ u8 bit_7:1;
+};
+
+struct UnknownStruct7
+{
+ u8 filler0[0x180];
+};
+
+struct UnknownStruct9
+{
+ s32 unk0;
+ u32 unk4;
+ u32 unk8;
+ u32 unkC_0:5;
+ u32 unk10;
+};
+
+extern u8 ewram[];
+#define ewram520 ((struct UnknownStruct7 *)(ewram + 0x00520))
+#define ewram16088 (*(u8 *) (ewram + 0x16088))
+#define ewram16089 (*(u8 *) (ewram + 0x16089))
+#define ewram17800 ((struct UnknownStruct6 *)(ewram + 0x17800))
+#define ewram17850 ((struct UnknownStruct5 *)(ewram + 0x17850))
+
+extern u8 gUnknown_020238CC[];
+extern u8 gUnknown_02024A68;
+extern u16 gUnknown_02024A6A[];
+extern u8 gUnknown_02024A72[];
+extern u8 gUnknown_03004340[];
+
+extern u16 gBattleTypeFlags;
+extern u8 gNumSafariBalls;
+
+extern u32 gExperienceTables[8][101];
+extern const struct SpriteTemplate gSpriteTemplate_820A4EC[];
+extern const struct SpriteTemplate gSpriteTemplate_820A51C[];
+extern const struct SpriteTemplate gSpriteTemplate_820A54C;
+extern const struct SpriteTemplate gSpriteTemplate_820A56C[];
+extern const struct SubspriteTable gSubspriteTables_820A684[];
+extern const struct SubspriteTable gSubspriteTables_820A6E4[];
+extern const struct SubspriteTable gSubspriteTables_820A6EC[];
+extern const struct SpriteSheet gUnknown_0820A754[];
+extern const struct SpritePalette gUnknown_0820A764[];
+extern const struct SpritePalette gUnknown_0820A774[];
+extern const struct SpriteSheet gUnknown_0820A784[];
+extern const struct SpriteTemplate gSpriteTemplate_820A7A4[];
+extern const struct SpriteTemplate gSpriteTemplate_820A7D4[];
+extern void *const gUnknown_0820A804[];
+extern void *const gUnknown_0820A80C[];
+extern void *const gUnknown_0820A814[];
+extern void *const gUnknown_0820A83C[];
+extern void *const gUnknown_0820A848[];
+extern void *const gUnknown_0820A854[];
+extern void *const gUnknown_0820A85C[];
+extern void *const gUnknown_0820A87C[];
+extern void *const gUnknown_0820A894[];
+extern void *const gUnknown_0820A8B4[];
+extern void *const gUnknown_0820A8DC[];
+extern void *const gUnknown_0820A904[];
+extern const u8 gUnknown_0820A81C[];
+extern const u8 gUnknown_0820A864[];
+extern const u8 gUnknown_0820A89C[];
+extern const u8 gUnknown_0820A8B0[];
+extern const struct BaseStats gBaseStats[];
+extern const u8 BattleText_SafariBalls[];
+extern const u8 BattleText_SafariBallsLeft[];
+extern const u8 BattleText_HighlightRed[];
+extern const u8 gUnknown_08D1216C[][32];
+
+extern const u8 *const gNatureNames[];
+extern const u16 gBattleInterfaceStatusIcons_DynPal[];
+
+#define ABS(n) ((n) >= 0 ? (n) : -(n))
+// Used for computing copy destination addresses
+#define MACRO1(n) ((n) - (n) / 8 * 8) + 64 * ((n) / 8)
+
+extern int sub_8040D3C();
+extern u8 sub_8090D90();
+extern void load_gfxc_health_bar();
+
+static void sub_8043D5C(struct Sprite *);
+static const void *sub_8043CDC(u8);
+void sub_8044210(u8, s16, u8);
+static void draw_status_ailment_maybe(u8);
+void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c);
+extern void sub_8045180(struct Sprite *);
+static void sub_8045110(struct Sprite *);
+static void sub_8045048(struct Sprite *);
+static void sub_8044F70(u8 taskId);
+static void sub_8044E74(u8 taskId);
+static void sub_8044ECC(u8 taskId);
+static u8 sub_80457E8(u8, u8);
+s32 sub_8045C78(u8, u8, u8, u8);
+static int sub_8045F58(s32, s32, int, int *, u8, u16);
+static u8 GetScaledExpFraction(int, int, int, u8);
+static void sub_8045D58(u8, u8);
+static u8 sub_804602C(int, int, int, int *, u8 *, u8);
+static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c);
+
+static int do_nothing(s16 unused1, s16 unused2, int unused3)
+{
+ return 9;
+}
+
+#ifdef NONMATCHING
+void sub_8043740(s16 a, u16 *b, u8 c)
+{
+ u8 sp0[4];
+ s8 i;
+ s8 j;
+ s32 r9;
+
+ for (i = 0; i < 4; i++)
+ sp0[i] = 0;
+
+ //_0804377C
+ //i = 3;
+ //r9 = -1;
+ for (i = 3, r9 = -1;;)
+ {
+ if (a > 0)
+ {
+ sp0[i] = a % 10;
+ a /= 10;
+ i--;
+ }
+ else
+ break;
+ asm(""::"r"(r9));
+ }
+
+ //_080437AA
+ for (; i > r9; i--)
+ {
+ //asm("":"=r"(r9));
+ sp0[i] = -1;
+ }
+ //_080437CE
+ if (sp0[3] == 0xFF)
+ sp0[3] = 0;
+
+ //_080437DA
+ if (c == 0)
+ {
+ for (i = 0, j = 0; i < 4; i++)
+ {
+ if (sp0[j] == 0xFF)
+ {
+ b[j] = (b[j] & 0xFC00) | 0x1E;
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E;
+ }
+ else
+ {
+ b[j] = (b[j] & 0xFC00) | (sp0[j] + 0x14);
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34);
+ }
+ j++;
+ }
+
+ }
+ //_0804386A
+ else
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (sp0[i] == 0xFF)
+ {
+ b[i] = (b[i] & 0xFC00) | 0x1E;
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | 0x1E;
+ }
+ else
+ {
+ b[i] = (b[i] & 0xFC00) | (sp0[i] + 0x14);
+ b[i + 0x20] = (b[i + 0x20] & 0xFC00) | (sp0[i] + 0x34);
+ }
+ }
+ }
+ asm(""::"r"(r9));
+}
+#else
+__attribute__((naked))
+void sub_8043740(s16 a, u16 *b, u8 c)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ adds r7, r1, 0\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r10, r2\n\
+ movs r3, 0\n\
+ movs r2, 0\n\
+_0804375C:\n\
+ lsls r0, r3, 24\n\
+ asrs r0, 24\n\
+ mov r3, sp\n\
+ adds r1, r3, r0\n\
+ strb r2, [r1]\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3\n\
+ ble _0804375C\n\
+ movs r3, 0x3\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ mov r9, r0\n\
+ mov r8, sp\n\
+_0804377C:\n\
+ lsls r0, r5, 16\n\
+ asrs r6, r0, 16\n\
+ cmp r6, 0\n\
+ ble _080437AA\n\
+ lsls r4, r3, 24\n\
+ asrs r4, 24\n\
+ mov r1, sp\n\
+ adds r5, r1, r4\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xA\n\
+ bl __modsi3\n\
+ strb r0, [r5]\n\
+ adds r0, r6, 0\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ subs r4, 0x1\n\
+ lsls r4, 24\n\
+ lsrs r3, r4, 24\n\
+ b _0804377C\n\
+_080437AA:\n\
+ lsls r1, r3, 24\n\
+ asrs r0, r1, 24\n\
+ cmp r0, r9\n\
+ ble _080437CE\n\
+ movs r4, 0xFF\n\
+ movs r3, 0x1\n\
+ negs r3, r3\n\
+_080437B8:\n\
+ asrs r2, r1, 24\n\
+ mov r5, sp\n\
+ adds r1, r5, r2\n\
+ ldrb r0, [r1]\n\
+ orrs r0, r4\n\
+ strb r0, [r1]\n\
+ subs r2, 0x1\n\
+ lsls r1, r2, 24\n\
+ asrs r0, r1, 24\n\
+ cmp r0, r3\n\
+ bgt _080437B8\n\
+_080437CE:\n\
+ mov r1, r8\n\
+ ldrb r0, [r1, 0x3]\n\
+ cmp r0, 0xFF\n\
+ bne _080437DA\n\
+ movs r0, 0\n\
+ strb r0, [r1, 0x3]\n\
+_080437DA:\n\
+ mov r2, r10\n\
+ cmp r2, 0\n\
+ bne _0804386A\n\
+ movs r3, 0\n\
+ movs r1, 0\n\
+ movs r6, 0xFC\n\
+ lsls r6, 8\n\
+ movs r5, 0x1E\n\
+ mov r12, r5\n\
+_080437EC:\n\
+ lsls r1, 24\n\
+ asrs r2, r1, 24\n\
+ mov r0, sp\n\
+ adds r5, r0, r2\n\
+ ldrb r0, [r5]\n\
+ mov r8, r1\n\
+ cmp r0, 0xFF\n\
+ bne _08043822\n\
+ lsls r1, r2, 1\n\
+ adds r1, r7\n\
+ ldrh r2, [r1]\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ mov r2, r12\n\
+ orrs r0, r2\n\
+ strh r0, [r1]\n\
+ lsls r3, 24\n\
+ asrs r1, r3, 23\n\
+ adds r1, r7\n\
+ adds r1, 0x40\n\
+ ldrh r2, [r1]\n\
+ adds r0, r6, 0\n\
+ ands r0, r2\n\
+ mov r5, r12\n\
+ orrs r0, r5\n\
+ strh r0, [r1]\n\
+ b _08043852\n\
+_08043822:\n\
+ lsls r2, 1\n\
+ adds r2, r7\n\
+ ldrh r0, [r2]\n\
+ adds r1, r6, 0\n\
+ ands r1, r0\n\
+ ldrb r0, [r5]\n\
+ adds r0, 0x14\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ lsls r4, r3, 24\n\
+ asrs r3, r4, 24\n\
+ lsls r2, r3, 1\n\
+ adds r2, r7\n\
+ adds r2, 0x40\n\
+ ldrh r0, [r2]\n\
+ adds r1, r6, 0\n\
+ ands r1, r0\n\
+ mov r5, sp\n\
+ adds r0, r5, r3\n\
+ ldrb r0, [r0]\n\
+ adds r0, 0x34\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ adds r3, r4, 0\n\
+_08043852:\n\
+ movs r0, 0x80\n\
+ lsls r0, 17\n\
+ add r0, r8\n\
+ lsrs r1, r0, 24\n\
+ movs r2, 0x80\n\
+ lsls r2, 17\n\
+ adds r0, r3, r2\n\
+ lsrs r3, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3\n\
+ ble _080437EC\n\
+ b _080438CE\n\
+_0804386A:\n\
+ movs r3, 0\n\
+ movs r4, 0xFC\n\
+ lsls r4, 8\n\
+ movs r6, 0x1E\n\
+_08043872:\n\
+ lsls r1, r3, 24\n\
+ asrs r2, r1, 24\n\
+ mov r3, sp\n\
+ adds r5, r3, r2\n\
+ ldrb r0, [r5]\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0xFF\n\
+ bne _0804389E\n\
+ lsls r1, r2, 1\n\
+ adds r1, r7\n\
+ ldrh r2, [r1]\n\
+ adds r0, r4, 0\n\
+ ands r0, r2\n\
+ orrs r0, r6\n\
+ strh r0, [r1]\n\
+ adds r1, 0x40\n\
+ ldrh r2, [r1]\n\
+ adds r0, r4, 0\n\
+ ands r0, r2\n\
+ orrs r0, r6\n\
+ strh r0, [r1]\n\
+ b _080438C0\n\
+_0804389E:\n\
+ lsls r2, 1\n\
+ adds r2, r7\n\
+ ldrh r0, [r2]\n\
+ adds r1, r4, 0\n\
+ ands r1, r0\n\
+ ldrb r0, [r5]\n\
+ adds r0, 0x14\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ adds r2, 0x40\n\
+ ldrh r0, [r2]\n\
+ adds r1, r4, 0\n\
+ ands r1, r0\n\
+ ldrb r0, [r5]\n\
+ adds r0, 0x34\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+_080438C0:\n\
+ movs r5, 0x80\n\
+ lsls r5, 17\n\
+ adds r0, r3, r5\n\
+ lsrs r3, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3\n\
+ ble _08043872\n\
+_080438CE:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif
+
+void unref_sub_80438E0(s16 a, s16 b, u16 *c)
+{
+ c[4] = 0x1E;
+ sub_8043740(b, c, 0);
+ sub_8043740(a, c + 5, 1);
+}
+
+u8 battle_make_oam_normal_battle(u8 a)
+{
+ int sp0 = 0;
+ u8 spriteId1;
+ u8 spriteId2;
+ u8 spriteId3;
+ struct Sprite *sprite;
+
+ if (!IsDoubleBattle())
+ {
+ if (battle_side_get_owner(a) == 0)
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[0], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[0], 240, 160, 1);
+
+ gSprites[spriteId1].oam.shape = 0;
+ gSprites[spriteId2].oam.shape = 0;
+ gSprites[spriteId2].oam.tileNum += 64;
+ }
+ else
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[0], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[0], 240, 160, 1);
+
+ gSprites[spriteId2].oam.tileNum += 32;
+ sp0 = 2;
+ }
+ //_080439F2
+
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ }
+ //_08043A28
+ else
+ {
+ if (battle_side_get_owner(a) == 0)
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A4EC[battle_get_per_side_status(a) / 2], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A4EC[battle_get_per_side_status(a) / 2], 240, 160, 1);
+
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].oam.tileNum += 32;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ sp0 = 1;
+ }
+ //_08043ACC
+ else
+ {
+ spriteId1 = CreateSprite(&gSpriteTemplate_820A51C[battle_get_per_side_status(a) / 2], 240, 160, 1);
+ spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A51C[battle_get_per_side_status(a) / 2], 240, 160, 1);
+
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].oam.tileNum += 32;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ sp0 = 2;
+ }
+ //_08043B4E
+ }
+ //_08043B50
+
+ spriteId3 = CreateSpriteAtEnd(&gSpriteTemplate_820A56C[gUnknown_02024A72[a]], 140, 60, 0);
+ sprite = &gSprites[spriteId3];
+ SetSubspriteTables(sprite, &gSubspriteTables_820A684[battle_side_get_owner(a)]);
+ sprite->subspriteMode = 2;
+ sprite->oam.priority = 1;
+ CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + sprite->oam.tileNum * 32), 64);
+
+ gSprites[spriteId1].data5 = spriteId3;
+ gSprites[spriteId1].data6 = a;
+ gSprites[spriteId1].invisible = TRUE;
+ gSprites[spriteId2].invisible = TRUE;
+ sprite->data5 = spriteId1;
+ sprite->data6 = sp0;
+ sprite->invisible = TRUE;
+
+ return spriteId1;
+}
+
+u8 battle_make_oam_safari_battle(void)
+{
+ u8 spriteId1 = CreateSprite(&gSpriteTemplate_820A54C, 240, 160, 1);
+ u8 spriteId2 = CreateSpriteAtEnd(&gSpriteTemplate_820A54C, 240, 160, 1);
+
+ gSprites[spriteId1].oam.shape = 0;
+ gSprites[spriteId2].oam.shape = 0;
+ gSprites[spriteId2].oam.tileNum += 0x40;
+ gSprites[spriteId1].oam.affineParam = spriteId2;
+ gSprites[spriteId2].data5 = spriteId1;
+ gSprites[spriteId2].callback = sub_8043D5C;
+ return spriteId1;
+}
+
+static const void *sub_8043CDC(u8 a)
+{
+ return gUnknown_08D1216C[a];
+}
+
+void sub_8043CEC(struct Sprite *sprite)
+{
+ u8 r5 = sprite->data5;
+
+ switch (sprite->data6)
+ {
+ case 0:
+ sprite->pos1.x = gSprites[r5].pos1.x + 16;
+ sprite->pos1.y = gSprites[r5].pos1.y;
+ break;
+ case 1:
+ sprite->pos1.x = gSprites[r5].pos1.x + 16;
+ sprite->pos1.y = gSprites[r5].pos1.y;
+ break;
+ default:
+ case 2:
+ sprite->pos1.x = gSprites[r5].pos1.x + 8;
+ sprite->pos1.y = gSprites[r5].pos1.y;
+ break;
+ }
+ sprite->pos2.x = gSprites[r5].pos2.x;
+ sprite->pos2.y = gSprites[r5].pos2.y;
+}
+
+static void sub_8043D5C(struct Sprite *sprite)
+{
+ u8 data5 = sprite->data5;
+
+ sprite->pos1.x = gSprites[data5].pos1.x + 64;
+ sprite->pos1.y = gSprites[data5].pos1.y;
+ sprite->pos2.x = gSprites[data5].pos2.x;
+ sprite->pos2.y = gSprites[data5].pos2.y;
+}
+
+void sub_8043D84(u8 a, u8 b, u32 c, u32 d, u32 e)
+{
+ ewram17850[a].unk0 = b;
+ ewram17850[a].unk4 = c;
+ ewram17850[a].unk8 = d;
+ ewram17850[a].unkC = e;
+ ewram17850[a].unk10 = 0xFFFF8000;
+}
+
+void sub_8043DB0(u8 a)
+{
+ gSprites[a].invisible = TRUE;
+ gSprites[gSprites[a].data5].invisible = TRUE;
+ gSprites[gSprites[a].oam.affineParam].invisible = TRUE;
+}
+
+void sub_8043DFC(u8 a)
+{
+ gSprites[a].invisible = FALSE;
+ gSprites[gSprites[a].data5].invisible = FALSE;
+ gSprites[gSprites[a].oam.affineParam].invisible = FALSE;
+}
+
+static void sub_8043E50(u8 spriteId, s16 x, s16 y)
+{
+ gSprites[spriteId].pos1.x = x;
+ gSprites[spriteId].pos1.y = y;
+}
+
+void unref_sub_8043E70(u8 a)
+{
+ DestroySprite(&gSprites[gSprites[a].oam.affineParam]);
+ DestroySprite(&gSprites[gSprites[a].data5]);
+ DestroySprite(&gSprites[a]);
+}
+
+void nullsub_11()
+{
+}
+
+void sub_8043EB4(u8 priority)
+{
+ s32 i;
+
+ for (i = 0; i < gUnknown_02024A68; i++)
+ {
+ u8 spriteId1;
+ u8 spriteId2;
+ u8 spriteId3;
+
+ spriteId1 = gUnknown_03004340[i];
+ spriteId2 = gSprites[spriteId1].oam.affineParam;
+ spriteId3 = gSprites[spriteId1].data5;
+ gSprites[spriteId1].oam.priority = priority;
+ gSprites[spriteId2].oam.priority = priority;
+ gSprites[spriteId3].oam.priority = priority;
+ }
+}
+
+void sub_8043F44(u8 a)
+{
+ s16 x = 0;
+ s16 y = 0;
+
+ if (!IsDoubleBattle())
+ {
+ if (battle_side_get_owner(a) != 0)
+ {
+ x = 44;
+ y = 30;
+ }
+ else
+ {
+ x = 158;
+ y = 88;
+ }
+ }
+ else
+ {
+ switch (battle_get_per_side_status(a))
+ {
+ case 0:
+ x = 159;
+ y = 77;
+ break;
+ case 2:
+ x = 171;
+ y = 102;
+ break;
+ case 1:
+ x = 44;
+ y = 19;
+ break;
+ case 3:
+ x = 32;
+ y = 44;
+ break;
+ }
+ }
+ sub_8043E50(gUnknown_03004340[a], x, y);
+}
+
+static void sub_8043FC0(u8 a, u8 b)
+{
+ u8 str[30];
+ void *const *r7;
+ u8 *ptr;
+ s32 i;
+ s32 two;
+
+ // TODO: Make this a local variable
+ memcpy(str, gUnknown_0820A81C, sizeof(str));
+ if (!IsDoubleBattle())
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r7 = gUnknown_0820A804;
+ else
+ r7 = gUnknown_0820A80C;
+ }
+ else
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r7 = gUnknown_0820A814;
+ else
+ r7 = gUnknown_0820A80C;
+ }
+
+ ptr = str + 6;
+ if (b == 100)
+ {
+ ptr = ConvertIntToDecimalStringN(ptr, 100, 0, 3);
+ }
+ else
+ {
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x11;
+ *(ptr++) = 1;
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x14;
+ *(ptr++) = 4;
+ *(ptr++) = CHAR_COLON;
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x14;
+ *(ptr++) = 0;
+ ptr = ConvertIntToDecimalStringN(ptr, b, 0, 2);
+ }
+
+ *(ptr++) = EXT_CTRL_CODE_BEGIN;
+ *(ptr++) = 0x13;
+ *(ptr++) = 0xF;
+ *(ptr++) = EOS;
+ sub_80034D4((u8 *)0x02000000, str);
+
+ two = 2;
+ for (i = 0; i < two; i++)
+ CpuCopy32((void *)(0x02000020 + i * 64), r7[i] + gSprites[a].oam.tileNum * 32, 32);
+}
+
+#ifdef NONMATCHING
+void sub_80440EC(u8 a, s16 b, u8 c)
+{
+ u8 str[0x14];
+ u8 *ptr;
+ s32 foo;
+ void *const *r4;
+ s32 i;
+
+ // TODO: make this a local variable
+ memcpy(str, gUnknown_0820A864, sizeof(str));
+ foo = gSprites[a].data6;
+
+ if (IsDoubleBattle() == TRUE || battle_side_get_owner(foo) == 1)
+ {
+ //_08044136
+ sub_8044210(a, b, c);
+ return;
+ }
+ //
+ ptr = str + 6;
+ if (c == 0)
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r4 = gUnknown_0820A83C;
+ else
+ r4 = gUnknown_0820A848;
+ c = 3;
+ ptr = sub_8003504(ptr, b, 0x13, 1);
+ *(ptr++) = 0xBA;
+ *(ptr++) = 0xFF;
+ sub_80034D4((u8 *)0x02000000, str);
+ }
+ else
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r4 = gUnknown_0820A854;
+ else
+ r4 = gUnknown_0820A85C;
+ c = 2;
+ sub_8003504(ptr, b, 0xF, 1);
+ sub_80034D4((u8 *)0x02000000, str);
+ }
+ //asm(""::"r"(a));
+ //_080441B6
+ for (i = 0; i < c; i++) // _080440BC
+ {
+ void *temp = r4[i] + gSprites[a].oam.tileNum * 32;
+ CpuCopy32((void *)(0x02000020 + i * 0x40), temp, 0x20);
+ }
+}
+#else
+__attribute__((naked))
+void sub_80440EC(u8 a, s16 b, u8 c)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x14\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ lsls r1, 16\n\
+ lsrs r6, r1, 16\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r8, r2\n\
+ ldr r1, _08044144 @ =gUnknown_0820A864\n\
+ mov r0, sp\n\
+ movs r2, 0x14\n\
+ bl memcpy\n\
+ ldr r1, _08044148 @ =gSprites\n\
+ lsls r0, r7, 4\n\
+ adds r0, r7\n\
+ lsls r0, 2\n\
+ adds r4, r0, r1\n\
+ movs r0, 0x3A\n\
+ ldrsh r5, [r4, r0]\n\
+ bl IsDoubleBattle\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ beq _08044136\n\
+ lsls r0, r5, 24\n\
+ lsrs r0, 24\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _0804414C\n\
+_08044136:\n\
+ lsls r1, r6, 16\n\
+ asrs r1, 16\n\
+ adds r0, r7, 0\n\
+ mov r2, r8\n\
+ bl sub_8044210\n\
+ b _080441F0\n\
+ .align 2, 0\n\
+_08044144: .4byte gUnknown_0820A864\n\
+_08044148: .4byte gSprites\n\
+_0804414C:\n\
+ mov r5, sp\n\
+ adds r5, 0x6\n\
+ mov r0, r8\n\
+ cmp r0, 0\n\
+ bne _08044190\n\
+ ldrh r0, [r4, 0x3A]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ ldr r4, _08044188 @ =gUnknown_0820A848\n\
+ cmp r0, 0\n\
+ bne _0804416A\n\
+ ldr r4, _0804418C @ =gUnknown_0820A83C\n\
+_0804416A:\n\
+ movs r0, 0x3\n\
+ mov r8, r0\n\
+ lsls r1, r6, 16\n\
+ asrs r1, 16\n\
+ adds r0, r5, 0\n\
+ movs r2, 0x13\n\
+ movs r3, 0x1\n\
+ bl sub_8003504\n\
+ adds r5, r0, 0\n\
+ movs r0, 0xBA\n\
+ strb r0, [r5]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r5, 0x1]\n\
+ b _080441B6\n\
+ .align 2, 0\n\
+_08044188: .4byte gUnknown_0820A848\n\
+_0804418C: .4byte gUnknown_0820A83C\n\
+_08044190:\n\
+ ldrh r0, [r4, 0x3A]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ ldr r4, _080441FC @ =gUnknown_0820A85C\n\
+ cmp r0, 0\n\
+ bne _080441A4\n\
+ ldr r4, _08044200 @ =gUnknown_0820A854\n\
+_080441A4:\n\
+ movs r0, 0x2\n\
+ mov r8, r0\n\
+ lsls r1, r6, 16\n\
+ asrs r1, 16\n\
+ adds r0, r5, 0\n\
+ movs r2, 0xF\n\
+ movs r3, 0x1\n\
+ bl sub_8003504\n\
+_080441B6:\n\
+ movs r0, 0x80\n\
+ lsls r0, 18\n\
+ mov r1, sp\n\
+ bl sub_80034D4\n\
+ mov r0, r8\n\
+ cmp r0, 0\n\
+ beq _080441F0\n\
+ ldr r1, _08044204 @ =gSprites\n\
+ lsls r0, r7, 4\n\
+ adds r0, r7\n\
+ lsls r0, 2\n\
+ adds r6, r0, r1\n\
+ adds r7, r4, 0\n\
+ ldr r5, _08044208 @ =0x02000020\n\
+ mov r4, r8\n\
+_080441D6:\n\
+ ldrh r0, [r6, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 17\n\
+ ldm r7!, {r1}\n\
+ adds r1, r0\n\
+ adds r0, r5, 0\n\
+ ldr r2, _0804420C @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+ adds r5, 0x40\n\
+ subs r4, 0x1\n\
+ cmp r4, 0\n\
+ bne _080441D6\n\
+_080441F0:\n\
+ add sp, 0x14\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080441FC: .4byte gUnknown_0820A85C\n\
+_08044200: .4byte gUnknown_0820A854\n\
+_08044204: .4byte gSprites\n\
+_08044208: .4byte 0x02000020\n\
+_0804420C: .4byte 0x04000008\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_8044210(u8 a, s16 b, u8 c)
+{
+ u8 str[0x14];
+ u8 *ptr;
+ void *const *r7;
+ int r10;
+ int r4;
+ int i;
+
+ // TODO: make this a local variable
+ memcpy(str, gUnknown_0820A89C, sizeof(str));
+ r4 = gSprites[a].data6;
+ if ((ewram17800[r4].bit_4) == 0)
+ return;
+ ptr = str + 6;
+ if (c == 0)
+ {
+ r7 = gUnknown_0820A87C;
+ r10 = 6;
+ ptr = sub_8003504(ptr, b, 0x2B, 1);
+ *(ptr++) = CHAR_SLASH;
+ *(ptr++) = EOS;
+ }
+ else
+ {
+ r7 = gUnknown_0820A894;
+ r10 = 2;
+ sub_8003504(ptr, b, 0xF, 1);
+ if (battle_side_get_owner(r4) == 0)
+ {
+ CpuCopy32(sub_8043CDC(0x74), (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x34) * 32), 32);
+ }
+ }
+ r4 = gSprites[a].data5;
+ sub_80034D4((u8 *)0x02000000, str);
+ for (i = 0; i < r10; i++)
+ {
+ CpuCopy32((void *)(0x02000020 + i * 0x40), r7[i] + gSprites[r4].oam.tileNum * 32, 0x20);
+ }
+}
+
+#ifdef NONMATCHING
+void sub_8044338(u8 a, struct Pokemon *pkmn)
+{
+ u8 str[0x14];
+ u8 *r6;
+ s32 r8;
+ u8 nature; // = GetNature(pkmn);
+ s32 r7;
+ u8 i;
+ u8 r5;
+
+ // TODO: make this a local variable
+ memcpy(str, gUnknown_0820A864, sizeof(str));
+ r6 = ewram520[battle_get_per_side_status(gSprites[a].data6)].filler0;
+ r8 = 5;
+ nature = GetNature(pkmn);
+ StringCopy(str + 6, gNatureNames[nature]);
+ sub_80034D4(r6, str);
+ r7 = 6;
+ for (i = 0; i < (u32)r8; i++, r7++) //_080443AA
+ {
+ u8 val;
+
+ if ((u8)(str[r7] - 0x37) <= 0x13 || (u8)(str[r7] + 0x79) <= 0x13)
+ val = 0x2C;
+ //_080443DC
+ else if ((u8)(str[r7] - 0x4B) <= 4 || (u8)(str[r7] + 0x65) <= 4)
+ val = 0x2D;
+ else
+ val = 0x2B;
+
+ CpuCopy32(sub_8043CDC(val), r6 + i * 64, 32);
+ }
+ //r7 = 1;
+ //sp18 = a * 16;
+ for (r7 = 1; r7 < r8 + 1; r7++)
+ {
+ int foo;
+
+ foo = gSprites[a].oam.tileNum + MACRO1(r7);
+ CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32);
+ r6 += 32;
+
+ foo = gSprites[a].oam.tileNum + 8 + MACRO1(r7);
+ CpuCopy32(r6, (u8 *)0x06010000 + foo * 32, 32);
+ r6 += 32;
+ }
+ //_08044486
+ r5 = gSprites[a].data5;
+ ConvertIntToDecimalStringN(str + 6, ewram[0x16089], 1, 2);
+ ConvertIntToDecimalStringN(str + 9, ewram[0x16088], 1, 2);
+ str[5] = 0;
+ str[8] = 0xBA;
+ sub_80034D4((u8 *)0x02000000, str);
+
+ for (r7 = 0; r7 < 5; r7++)
+ {
+ if (r7 <= 1)
+ {
+ int foo = (gSprites[r5].oam.tileNum + 2 + r7);
+ CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x06010000 + foo * 32, 32);
+ }
+ else
+ {
+ int foo = (r7 + gSprites[r5].oam.tileNum);
+ CpuCopy32((u8 *)0x02000020 + r7 * 0x40, (u8 *)0x060100C0 + foo * 32, 32);
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_8044338(u8 a, struct Pokemon *pkmn)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x20\n\
+ adds r4, r1, 0\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x14]\n\
+ ldr r1, _080443CC @ =gUnknown_0820A864\n\
+ mov r0, sp\n\
+ movs r2, 0x14\n\
+ bl memcpy\n\
+ ldr r1, _080443D0 @ =gSprites\n\
+ ldr r2, [sp, 0x14]\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x3A]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_get_per_side_status\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ lsls r1, 7\n\
+ ldr r3, _080443D4 @ =0x02000520\n\
+ adds r6, r1, r3\n\
+ movs r0, 0x5\n\
+ mov r8, r0\n\
+ adds r0, r4, 0\n\
+ bl GetNature\n\
+ lsls r0, 24\n\
+ mov r4, sp\n\
+ adds r4, 0x6\n\
+ ldr r1, _080443D8 @ =gNatureNames\n\
+ lsrs r0, 22\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ adds r0, r4, 0\n\
+ bl StringCopy\n\
+ adds r0, r6, 0\n\
+ mov r1, sp\n\
+ bl sub_80034D4\n\
+ movs r7, 0x6\n\
+ movs r5, 0\n\
+ mov r1, sp\n\
+ adds r1, 0x9\n\
+ str r1, [sp, 0x1C]\n\
+_080443AA:\n\
+ mov r2, sp\n\
+ adds r0, r2, r7\n\
+ ldrb r1, [r0]\n\
+ adds r0, r1, 0\n\
+ subs r0, 0x37\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x13\n\
+ bls _080443C8\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x79\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x13\n\
+ bhi _080443DC\n\
+_080443C8:\n\
+ movs r0, 0x2C\n\
+ b _080443FA\n\
+ .align 2, 0\n\
+_080443CC: .4byte gUnknown_0820A864\n\
+_080443D0: .4byte gSprites\n\
+_080443D4: .4byte 0x02000520\n\
+_080443D8: .4byte gNatureNames\n\
+_080443DC:\n\
+ adds r0, r1, 0\n\
+ subs r0, 0x4B\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x4\n\
+ bls _080443F4\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x65\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x4\n\
+ bhi _080443F8\n\
+_080443F4:\n\
+ movs r0, 0x2D\n\
+ b _080443FA\n\
+_080443F8:\n\
+ movs r0, 0x2B\n\
+_080443FA:\n\
+ bl sub_8043CDC\n\
+ lsls r1, r5, 6\n\
+ adds r1, r6, r1\n\
+ ldr r2, _080444F8 @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ adds r7, 0x1\n\
+ cmp r5, r8\n\
+ bcc _080443AA\n\
+ movs r7, 0x1\n\
+ ldr r3, [sp, 0x14]\n\
+ lsls r3, 4\n\
+ str r3, [sp, 0x18]\n\
+ movs r0, 0x1\n\
+ add r0, r8\n\
+ mov r9, r0\n\
+ cmp r7, r9\n\
+ bge _08044486\n\
+ ldr r1, _080444FC @ =gSprites\n\
+ ldr r2, _080444F8 @ =REG_BG0CNT\n\
+ mov r10, r2\n\
+ ldr r2, [sp, 0x14]\n\
+ adds r0, r3, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ mov r8, r0\n\
+_08044436:\n\
+ mov r3, r8\n\
+ ldrh r0, [r3, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 22\n\
+ adds r5, r7, 0\n\
+ cmp r7, 0\n\
+ bge _08044446\n\
+ adds r5, r7, 0x7\n\
+_08044446:\n\
+ asrs r5, 3\n\
+ lsls r4, r5, 3\n\
+ subs r4, r7, r4\n\
+ adds r0, r4\n\
+ lsls r5, 6\n\
+ adds r0, r5\n\
+ lsls r0, 5\n\
+ ldr r2, _08044500 @ =0x06010000\n\
+ adds r1, r0, r2\n\
+ adds r0, r6, 0\n\
+ mov r2, r10\n\
+ bl CpuSet\n\
+ adds r6, 0x20\n\
+ mov r3, r8\n\
+ ldrh r0, [r3, 0x4]\n\
+ lsls r0, 22\n\
+ lsrs r0, 22\n\
+ adds r4, 0x8\n\
+ adds r0, r4\n\
+ adds r0, r5\n\
+ lsls r0, 5\n\
+ ldr r2, _08044500 @ =0x06010000\n\
+ adds r1, r0, r2\n\
+ adds r0, r6, 0\n\
+ mov r2, r10\n\
+ bl CpuSet\n\
+ adds r6, 0x20\n\
+ adds r7, 0x1\n\
+ cmp r7, r9\n\
+ blt _08044436\n\
+_08044486:\n\
+ ldr r6, _080444FC @ =gSprites\n\
+ ldr r3, [sp, 0x18]\n\
+ ldr r1, [sp, 0x14]\n\
+ adds r0, r3, r1\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrh r5, [r0, 0x38]\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ ldr r4, _08044504 @ =0x02000000\n\
+ ldr r2, _08044508 @ =0x00016089\n\
+ adds r0, r4, r2\n\
+ ldrb r1, [r0]\n\
+ mov r0, sp\n\
+ adds r0, 0x6\n\
+ movs r2, 0x1\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ ldr r3, _0804450C @ =0x00016088\n\
+ adds r4, r3\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp, 0x1C]\n\
+ movs r2, 0x1\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ mov r1, sp\n\
+ movs r0, 0\n\
+ strb r0, [r1, 0x5]\n\
+ movs r0, 0xBA\n\
+ strb r0, [r1, 0x8]\n\
+ movs r0, 0x80\n\
+ lsls r0, 18\n\
+ bl sub_80034D4\n\
+ movs r7, 0\n\
+ lsls r0, r5, 4\n\
+ adds r0, r5\n\
+ lsls r0, 2\n\
+ adds r5, r0, r6\n\
+ ldr r4, _08044510 @ =0x02000020\n\
+_080444DA:\n\
+ cmp r7, 0x1\n\
+ bgt _08044514\n\
+ ldrh r1, [r5, 0x4]\n\
+ lsls r1, 22\n\
+ lsrs r1, 22\n\
+ adds r0, r7, 0x2\n\
+ adds r1, r0\n\
+ lsls r1, 5\n\
+ ldr r0, _08044500 @ =0x06010000\n\
+ adds r1, r0\n\
+ adds r0, r4, 0\n\
+ ldr r2, _080444F8 @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+ b _0804452A\n\
+ .align 2, 0\n\
+_080444F8: .4byte 0x04000008\n\
+_080444FC: .4byte gSprites\n\
+_08044500: .4byte 0x06010000\n\
+_08044504: .4byte 0x02000000\n\
+_08044508: .4byte 0x00016089\n\
+_0804450C: .4byte 0x00016088\n\
+_08044510: .4byte 0x02000020\n\
+_08044514:\n\
+ ldrh r1, [r5, 0x4]\n\
+ lsls r1, 22\n\
+ lsrs r1, 22\n\
+ adds r1, r7, r1\n\
+ lsls r1, 5\n\
+ ldr r2, _08044544 @ =0x060100c0\n\
+ adds r1, r2\n\
+ adds r0, r4, 0\n\
+ ldr r2, _08044548 @ =REG_BG0CNT\n\
+ bl CpuSet\n\
+_0804452A:\n\
+ adds r4, 0x40\n\
+ adds r7, 0x1\n\
+ cmp r7, 0x4\n\
+ ble _080444DA\n\
+ add sp, 0x20\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08044544: .4byte 0x060100c0\n\
+_08044548: .4byte 0x04000008\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_804454C(void)
+{
+ s32 i;
+ u8 spriteId;
+
+ for (i = 0; i < gUnknown_02024A68; i++)
+ {
+ if (gSprites[gUnknown_03004340[i]].callback == SpriteCallbackDummy
+ && battle_side_get_owner(i) != 1
+ && (IsDoubleBattle() || battle_side_get_owner(i) != 0))
+ {
+ u8 r6;
+
+ ewram17800[i].bit_4 ^= 1;
+ r6 = ewram17800[i].bit_4;
+ if (battle_side_get_owner(i) == 0)
+ {
+
+ if (!IsDoubleBattle())
+ continue;
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ continue;
+
+ if (r6 == 1)
+ {
+ spriteId = gSprites[gUnknown_03004340[i]].data5;
+
+ CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_HP), 0);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_MAX_HP), 1);
+ }
+ else
+ {
+ draw_status_ailment_maybe(gUnknown_03004340[i]);
+ sub_8045A5C(gUnknown_03004340[i], &gPlayerParty[gUnknown_02024A6A[i]], 5);
+ CpuCopy32(sub_8043CDC(0x75), (void *)(OBJ_VRAM0 + 0x680 + gSprites[gUnknown_03004340[i]].oam.tileNum * 32), 32);
+ }
+ }
+ else
+ {
+ if (r6 == 1)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ {
+ sub_8044338(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]]);
+ }
+ else
+ {
+ spriteId = gSprites[gUnknown_03004340[i]].data5;
+
+ CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_HP), 0);
+ sub_8044210(gUnknown_03004340[i], GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_MAX_HP), 1);
+ }
+ }
+ else
+ {
+ draw_status_ailment_maybe(gUnknown_03004340[i]);
+ sub_8045A5C(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]], 5);
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ sub_8045A5C(gUnknown_03004340[i], &gEnemyParty[gUnknown_02024A6A[i]], 4);
+ }
+ }
+ gSprites[gUnknown_03004340[i]].data7 ^= 1;
+ }
+ }
+}
+
+struct UnknownStruct8
+{
+ u16 unk0;
+ u32 unk4;
+};
+
+// This function almost matches except for just two instructions around 0x08044B52 that are swapped.
+#ifdef NONMATCHING
+u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
+{
+ u8 r7;
+ s16 x;
+ s16 y;
+ s16 r8;
+ s16 r5;
+
+ int i;
+ u8 sp[6];
+ s8 sp14;
+ u8 sp18;
+ u8 taskId;
+
+ if (c == 0 || battle_get_per_side_status(a) != 3)
+ {
+ if (battle_side_get_owner(a) == 0)
+ {
+ r7 = 0;
+ x = 136;
+ y = 96;
+ r8 = 100;
+ r5 = -5;
+ }
+ else
+ {
+ r7 = 1;
+ if (c == 0 || !IsDoubleBattle())
+ {
+ x = 104;
+ y = 40;
+ }
+ else
+ {
+ x = 104;
+ y = 16;
+ }
+ r8 = -100;
+ r5 = 5;
+ }
+ }
+ else
+ {
+ r7 = 1;
+ x = 104;
+ y = 40;
+ r8 = -100;
+ r5 = 5;
+ }
+ //_08044884
+
+ sp14 = 0;
+ for (i = 0; i < 6; i++) //_080448A0
+ {
+ if (b[i].unk0 != 0xFFFF)
+ sp14++;
+ }
+
+ LoadCompressedObjectPic(&gUnknown_0820A754[r7]);
+ LoadSpriteSheet(&gUnknown_0820A784[r7]);
+ LoadSpritePalette(&gUnknown_0820A764[r7]);
+ LoadSpritePalette(&gUnknown_0820A774[r7]);
+
+ sp18 = CreateSprite(&gSpriteTemplate_820A7A4[r7], x, y, 10);
+ SetSubspriteTables(&gSprites[sp18], gSubspriteTables_820A6E4);
+ gSprites[sp18].pos2.x = r8;
+ gSprites[sp18].data0 = r5;
+ if (r7 != 0)
+ {
+ gSprites[sp18].pos1.x -= 96;
+ gSprites[sp18].oam.matrixNum = 8;
+ }
+ else
+ {
+ gSprites[sp18].pos1.x += 0x60;
+ }
+ //_0804495A
+ for (i = 0; i < 6; i++) //_08044970
+ {
+ sp[i] = CreateSpriteAtEnd(&gSpriteTemplate_820A7D4[r7], x, y - 4, 9);
+ if (d == 0)
+ {
+ gSprites[sp[i]].callback = sub_8045180;
+ }
+ //_080449A0
+ if (r7 == 0)
+ {
+ gSprites[sp[i]].pos2.x = 0;
+ gSprites[sp[i]].pos2.y = 0;
+ }
+ //_080449BE
+ gSprites[sp[i]].data0 = sp18;
+ if (r7 == 0)
+ {
+ gSprites[sp[i]].pos1.x += 10 * i + 24;
+ gSprites[sp[i]].data1 = i * 7 + 10;
+ gSprites[sp[i]].pos2.x = 120;
+ }
+ //_08044A18
+ else
+ {
+ gSprites[sp[i]].pos1.x -= 10 * (5 - i) + 24;
+ gSprites[sp[i]].data1 = (6 - i) * 7 + 10;
+ gSprites[sp[i]].pos2.x = -120;
+ }
+ //_08044A56
+ gSprites[sp[i]].data2 = r7;
+ }
+ //_08044A76
+ if (battle_side_get_owner(a) == 0)
+ {
+ for (i = 0; i < 6; i++) //_08044A9A
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_40) // && b[i] != 0xFFFF && b[i]
+ {
+ if (b[i].unk0 == 0xFFFF)
+ {
+ //_08044AE6
+ gSprites[sp[i]].oam.tileNum += 1;
+ gSprites[sp[i]].data7 = 1;
+ // to _08044B52
+ }
+ else if (b[i].unk0 == 0)
+ {
+ gSprites[sp[i]].oam.tileNum += 3;
+ // to _08044B46
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[i]].oam.tileNum += 2;
+ }
+ }
+ //_08044ADC
+ else
+ {
+ if (i >= sp14)
+ {
+ //_08044AE6
+ gSprites[sp[i]].oam.tileNum += 1;
+ gSprites[sp[i]].data7 = 1;
+ // to _08044B52
+ }
+ else if (b[i].unk0 == 0)
+ {
+ //_08044B14
+ gSprites[sp[i]].oam.tileNum += 3;
+ // to _08044B46
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[i]].oam.tileNum += 2;
+ }
+ }
+ }
+ }
+ //_08044B5E
+ else
+ {
+ // Mismatch occurrs in this loop initialization
+ for (i = 0; i < 6; i++)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_40)
+ {
+ if (b[i].unk0 == 0xFFFF)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 1;
+ gSprites[sp[5 - i]].data7 = 1;
+ }
+ else if (b[i].unk0 == 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 3;
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 2;
+ }
+ }
+ else
+ {
+ if (i >= sp14)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 1;
+ gSprites[sp[5 - i]].data7 = 1;
+ }
+ else if (b[i].unk0 == 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 3;
+ }
+ else if (b[i].unk4 != 0)
+ {
+ gSprites[sp[5 - i]].oam.tileNum += 2;
+ }
+ }
+ // This corrects the initialization order, but messes up the counter update order
+ asm(""::"r"(&b[i]));
+ }
+ }
+ //_08044C38
+ taskId = CreateTask(TaskDummy, 5);
+ gTasks[taskId].data[0] = a;
+ gTasks[taskId].data[1] = sp18;
+ for (i = 0; i < 6; i++)
+ gTasks[taskId].data[3 + i] = sp[i];
+ gTasks[taskId].data[10] = d;
+ PlaySE12WithPanning(SE_TB_START, 0);
+ return taskId;
+}
+#else
+__attribute__((naked))
+u8 sub_8044804(u8 a, const struct UnknownStruct8 *b, u8 c, u8 d)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x28\n\
+ str r1, [sp, 0xC]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x8]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ adds r4, r2, 0\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ str r3, [sp, 0x10]\n\
+ cmp r4, 0\n\
+ beq _08044834\n\
+ bl battle_get_per_side_status\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x3\n\
+ beq _08044878\n\
+_08044834:\n\
+ ldr r0, [sp, 0x8]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08044854\n\
+ movs r7, 0\n\
+ movs r1, 0x88\n\
+ movs r2, 0x60\n\
+ movs r0, 0x64\n\
+ mov r8, r0\n\
+ ldr r5, _08044850 @ =0x0000fffb\n\
+ b _08044884\n\
+ .align 2, 0\n\
+_08044850: .4byte 0x0000fffb\n\
+_08044854:\n\
+ movs r7, 0x1\n\
+ cmp r4, 0\n\
+ beq _08044864\n\
+ bl IsDoubleBattle\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0804486A\n\
+_08044864:\n\
+ movs r1, 0x68\n\
+ movs r2, 0x28\n\
+ b _0804486E\n\
+_0804486A:\n\
+ movs r1, 0x68\n\
+ movs r2, 0x10\n\
+_0804486E:\n\
+ ldr r3, _08044874 @ =0x0000ff9c\n\
+ mov r8, r3\n\
+ b _08044882\n\
+ .align 2, 0\n\
+_08044874: .4byte 0x0000ff9c\n\
+_08044878:\n\
+ movs r7, 0x1\n\
+ movs r1, 0x68\n\
+ movs r2, 0x28\n\
+ ldr r5, _08044930 @ =0x0000ff9c\n\
+ mov r8, r5\n\
+_08044882:\n\
+ movs r5, 0x5\n\
+_08044884:\n\
+ movs r6, 0\n\
+ str r6, [sp, 0x14]\n\
+ lsls r4, r7, 3\n\
+ ldr r0, _08044934 @ =gUnknown_0820A754\n\
+ mov r10, r0\n\
+ lsls r3, r7, 1\n\
+ mov r9, r3\n\
+ lsls r1, 16\n\
+ str r1, [sp, 0x20]\n\
+ lsls r2, 16\n\
+ str r2, [sp, 0x24]\n\
+ ldr r2, _08044938 @ =0x0000ffff\n\
+ ldr r1, [sp, 0xC]\n\
+ movs r6, 0x5\n\
+_080448A0:\n\
+ ldrh r0, [r1]\n\
+ cmp r0, r2\n\
+ beq _080448B4\n\
+ ldr r3, [sp, 0x14]\n\
+ lsls r0, r3, 24\n\
+ movs r3, 0x80\n\
+ lsls r3, 17\n\
+ adds r0, r3\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x14]\n\
+_080448B4:\n\
+ adds r1, 0x8\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080448A0\n\
+ mov r6, r10\n\
+ adds r0, r4, r6\n\
+ bl LoadCompressedObjectPic\n\
+ ldr r0, _0804493C @ =gUnknown_0820A784\n\
+ adds r0, r4, r0\n\
+ bl LoadSpriteSheet\n\
+ ldr r0, _08044940 @ =gUnknown_0820A764\n\
+ adds r0, r4, r0\n\
+ bl LoadSpritePalette\n\
+ ldr r0, _08044944 @ =gUnknown_0820A774\n\
+ adds r0, r4, r0\n\
+ bl LoadSpritePalette\n\
+ mov r1, r9\n\
+ adds r0, r1, r7\n\
+ lsls r0, 3\n\
+ ldr r1, _08044948 @ =gSpriteTemplate_820A7A4\n\
+ adds r0, r1\n\
+ ldr r2, [sp, 0x20]\n\
+ asrs r1, r2, 16\n\
+ ldr r3, [sp, 0x24]\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0xA\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x18]\n\
+ lsls r0, 4\n\
+ ldr r6, [sp, 0x18]\n\
+ adds r0, r6\n\
+ lsls r0, 2\n\
+ ldr r1, _0804494C @ =gSprites\n\
+ adds r4, r0, r1\n\
+ ldr r1, _08044950 @ =gSubspriteTables_820A6E4\n\
+ adds r0, r4, 0\n\
+ bl SetSubspriteTables\n\
+ mov r0, r8\n\
+ strh r0, [r4, 0x24]\n\
+ strh r5, [r4, 0x2E]\n\
+ cmp r7, 0\n\
+ beq _08044954\n\
+ ldrh r0, [r4, 0x20]\n\
+ subs r0, 0x60\n\
+ strh r0, [r4, 0x20]\n\
+ ldrb r1, [r4, 0x3]\n\
+ movs r0, 0x3F\n\
+ negs r0, r0\n\
+ ands r0, r1\n\
+ movs r1, 0x10\n\
+ orrs r0, r1\n\
+ strb r0, [r4, 0x3]\n\
+ b _0804495A\n\
+ .align 2, 0\n\
+_08044930: .4byte 0x0000ff9c\n\
+_08044934: .4byte gUnknown_0820A754\n\
+_08044938: .4byte 0x0000ffff\n\
+_0804493C: .4byte gUnknown_0820A784\n\
+_08044940: .4byte gUnknown_0820A764\n\
+_08044944: .4byte gUnknown_0820A774\n\
+_08044948: .4byte gSpriteTemplate_820A7A4\n\
+_0804494C: .4byte gSprites\n\
+_08044950: .4byte gSubspriteTables_820A6E4\n\
+_08044954:\n\
+ ldrh r0, [r4, 0x20]\n\
+ adds r0, 0x60\n\
+ strh r0, [r4, 0x20]\n\
+_0804495A:\n\
+ movs r6, 0\n\
+ ldr r1, _08044A04 @ =gSprites\n\
+ mov r10, r1\n\
+ mov r4, sp\n\
+ mov r2, r9\n\
+ adds r0, r2, r7\n\
+ lsls r0, 3\n\
+ str r0, [sp, 0x1C]\n\
+ movs r3, 0xA\n\
+ mov r9, r3\n\
+ mov r8, r6\n\
+_08044970:\n\
+ ldr r0, _08044A08 @ =gSpriteTemplate_820A7D4\n\
+ ldr r5, [sp, 0x24]\n\
+ ldr r1, _08044A0C @ =0xfffc0000\n\
+ adds r2, r5, r1\n\
+ ldr r3, [sp, 0x1C]\n\
+ adds r0, r3, r0\n\
+ ldr r5, [sp, 0x20]\n\
+ asrs r1, r5, 16\n\
+ asrs r2, 16\n\
+ movs r3, 0x9\n\
+ bl CreateSpriteAtEnd\n\
+ strb r0, [r4]\n\
+ ldr r0, [sp, 0x10]\n\
+ cmp r0, 0\n\
+ bne _080449A0\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 4\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ ldr r2, _08044A10 @ =gSprites + 0x1C\n\
+ adds r1, r2\n\
+ ldr r0, _08044A14 @ =sub_8045180\n\
+ str r0, [r1]\n\
+_080449A0:\n\
+ ldr r5, _08044A04 @ =gSprites\n\
+ cmp r7, 0\n\
+ bne _080449BE\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ add r0, r10\n\
+ strh r7, [r0, 0x24]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ add r0, r10\n\
+ strh r7, [r0, 0x26]\n\
+_080449BE:\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ movs r1, 0\n\
+ mov r3, sp\n\
+ ldrh r3, [r3, 0x18]\n\
+ strh r3, [r0, 0x2E]\n\
+ cmp r7, 0\n\
+ bne _08044A18\n\
+ ldrb r0, [r4]\n\
+ lsls r1, r0, 4\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r5\n\
+ ldrh r0, [r1, 0x20]\n\
+ adds r0, 0x18\n\
+ add r0, r8\n\
+ strh r0, [r1, 0x20]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ mov r1, r9\n\
+ strh r1, [r0, 0x30]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ movs r1, 0x78\n\
+ b _08044A56\n\
+ .align 2, 0\n\
+_08044A04: .4byte gSprites\n\
+_08044A08: .4byte gSpriteTemplate_820A7D4\n\
+_08044A0C: .4byte 0xfffc0000\n\
+_08044A10: .4byte gSprites + 0x1C\n\
+_08044A14: .4byte sub_8045180\n\
+_08044A18:\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r5\n\
+ ldrh r3, [r2, 0x20]\n\
+ subs r3, 0x18\n\
+ movs r1, 0x5\n\
+ subs r1, r6\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 1\n\
+ subs r3, r0\n\
+ strh r3, [r2, 0x20]\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r5\n\
+ movs r1, 0x6\n\
+ subs r1, r6\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ adds r0, 0xA\n\
+ strh r0, [r2, 0x30]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ ldr r1, _08044AC4 @ =0x0000ff88\n\
+_08044A56:\n\
+ strh r1, [r0, 0x24]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ strh r7, [r0, 0x32]\n\
+ adds r4, 0x1\n\
+ movs r2, 0x7\n\
+ add r9, r2\n\
+ movs r3, 0xA\n\
+ add r8, r3\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ bgt _08044A76\n\
+ b _08044970\n\
+_08044A76:\n\
+ ldr r0, [sp, 0x8]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08044B5E\n\
+ movs r6, 0\n\
+ ldr r5, _08044AC8 @ =gBattleTypeFlags\n\
+ mov r10, r5\n\
+ ldr r0, _08044ACC @ =0x0000ffff\n\
+ mov r9, r0\n\
+ ldr r7, _08044AD0 @ =gSprites\n\
+ ldr r1, _08044AD4 @ =0x000003ff\n\
+ mov r12, r1\n\
+ ldr r2, _08044AD8 @ =0xfffffc00\n\
+ mov r8, r2\n\
+ mov r4, sp\n\
+ ldr r5, [sp, 0xC]\n\
+_08044A9A:\n\
+ mov r3, r10\n\
+ ldrh r1, [r3]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08044ADC\n\
+ ldrh r0, [r5]\n\
+ cmp r0, r9\n\
+ beq _08044AE6\n\
+ cmp r0, 0\n\
+ bne _08044B2E\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044B46\n\
+ .align 2, 0\n\
+_08044AC4: .4byte 0x0000ff88\n\
+_08044AC8: .4byte gBattleTypeFlags\n\
+_08044ACC: .4byte 0x0000ffff\n\
+_08044AD0: .4byte gSprites\n\
+_08044AD4: .4byte 0x000003ff\n\
+_08044AD8: .4byte 0xfffffc00\n\
+_08044ADC:\n\
+ ldr r1, [sp, 0x14]\n\
+ lsls r0, r1, 24\n\
+ asrs r0, 24\n\
+ cmp r6, r0\n\
+ blt _08044B14\n\
+_08044AE6:\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x1\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r7\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x3C]\n\
+ b _08044B52\n\
+_08044B14:\n\
+ ldrh r0, [r5]\n\
+ cmp r0, 0\n\
+ bne _08044B2E\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044B46\n\
+_08044B2E:\n\
+ ldr r0, [r5, 0x4]\n\
+ cmp r0, 0\n\
+ beq _08044B52\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x2\n\
+_08044B46:\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+_08044B52:\n\
+ adds r4, 0x1\n\
+ adds r5, 0x8\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08044A9A\n\
+ b _08044C38\n\
+_08044B5E:\n\
+ movs r6, 0\n\
+ ldr r1, _08044BA4 @ =gBattleTypeFlags\n\
+ mov r10, r1\n\
+ ldr r2, _08044BA8 @ =0x0000ffff\n\
+ mov r9, r2\n\
+ ldr r7, _08044BAC @ =gSprites\n\
+ ldr r3, _08044BB0 @ =0x000003ff\n\
+ mov r12, r3\n\
+ ldr r5, _08044BB4 @ =0xfffffc00\n\
+ mov r8, r5\n\
+ ldr r5, [sp, 0xC]\n\
+ mov r4, sp\n\
+ adds r4, 0x5\n\
+_08044B78:\n\
+ mov r0, r10\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08044BB8\n\
+ ldrh r0, [r5]\n\
+ cmp r0, r9\n\
+ beq _08044BC2\n\
+ cmp r0, 0\n\
+ bne _08044C0A\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044C22\n\
+ .align 2, 0\n\
+_08044BA4: .4byte gBattleTypeFlags\n\
+_08044BA8: .4byte 0x0000ffff\n\
+_08044BAC: .4byte gSprites\n\
+_08044BB0: .4byte 0x000003ff\n\
+_08044BB4: .4byte 0xfffffc00\n\
+_08044BB8:\n\
+ ldr r1, [sp, 0x14]\n\
+ lsls r0, r1, 24\n\
+ asrs r0, 24\n\
+ cmp r6, r0\n\
+ blt _08044BF0\n\
+_08044BC2:\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x1\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+ ldrb r1, [r4]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r7\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x3C]\n\
+ b _08044C2E\n\
+_08044BF0:\n\
+ ldrh r0, [r5]\n\
+ cmp r0, 0\n\
+ bne _08044C0A\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x3\n\
+ b _08044C22\n\
+_08044C0A:\n\
+ ldr r0, [r5, 0x4]\n\
+ cmp r0, 0\n\
+ beq _08044C2E\n\
+ ldrb r0, [r4]\n\
+ lsls r2, r0, 4\n\
+ adds r2, r0\n\
+ lsls r2, 2\n\
+ adds r2, r7\n\
+ ldrh r3, [r2, 0x4]\n\
+ lsls r1, r3, 22\n\
+ lsrs r1, 22\n\
+ adds r1, 0x2\n\
+_08044C22:\n\
+ mov r0, r12\n\
+ ands r1, r0\n\
+ mov r0, r8\n\
+ ands r0, r3\n\
+ orrs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+_08044C2E:\n\
+ subs r4, 0x1\n\
+ adds r5, 0x8\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08044B78\n\
+_08044C38:\n\
+ ldr r0, _08044C98 @ =TaskDummy\n\
+ movs r1, 0x5\n\
+ bl CreateTask\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ ldr r2, _08044C9C @ =gTasks\n\
+ lsls r3, r4, 2\n\
+ adds r1, r3, r4\n\
+ lsls r1, 3\n\
+ adds r0, r1, r2\n\
+ mov r5, sp\n\
+ ldrh r5, [r5, 0x8]\n\
+ strh r5, [r0, 0x8]\n\
+ mov r6, sp\n\
+ ldrh r6, [r6, 0x18]\n\
+ strh r6, [r0, 0xA]\n\
+ movs r6, 0\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xE\n\
+ adds r1, r0\n\
+_08044C62:\n\
+ mov r5, sp\n\
+ adds r0, r5, r6\n\
+ ldrb r0, [r0]\n\
+ strh r0, [r1]\n\
+ adds r1, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _08044C62\n\
+ adds r0, r3, r4\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ ldrh r6, [r5, 0x10]\n\
+ strh r6, [r0, 0x1C]\n\
+ movs r0, 0x72\n\
+ movs r1, 0\n\
+ bl PlaySE12WithPanning\n\
+ adds r0, r4, 0\n\
+ add sp, 0x28\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_08044C98: .4byte TaskDummy\n\
+_08044C9C: .4byte gTasks\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_8044CA0(u8 taskId)
+{
+ u8 sp[6];
+ u8 r9;
+ u8 r10;
+ u8 sp8;
+ s32 i;
+
+ r9 = gTasks[taskId].data[10];
+ r10 = gTasks[taskId].data[1];
+ sp8 = gTasks[taskId].data[0];
+ for (i = 0; i < 6; i++)
+ sp[i] = gTasks[taskId].data[3 + i];
+
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x10;
+ gTasks[taskId].data[15] = 16;
+ for (i = 0; i < 6; i++)
+ gSprites[sp[i]].oam.objMode = 1;
+ gSprites[r10].oam.objMode = 1;
+ if (r9 != 0)
+ {
+ for (i = 0; i < 6; i++)
+ {
+ if (battle_side_get_owner(sp8) != 0)
+ {
+ gSprites[sp[5 - i]].data1 = 7 * i;
+ gSprites[sp[5 - i]].data3 = 0;
+ gSprites[sp[5 - i]].data4 = 0;
+ gSprites[sp[5 - i]].callback = sub_8045110;
+ }
+ else
+ {
+ gSprites[sp[i]].data1 = 7 * i;
+ gSprites[sp[i]].data3 = 0;
+ gSprites[sp[i]].data4 = 0;
+ gSprites[sp[i]].callback = sub_8045110;
+ }
+ }
+ gSprites[r10].data0 /= 2;
+ gSprites[r10].data1 = 0;
+ gSprites[r10].callback = sub_8045048;
+ SetSubspriteTables(&gSprites[r10], gSubspriteTables_820A6EC);
+ gTasks[taskId].func = sub_8044E74;
+ }
+ else
+ {
+ gTasks[taskId].func = sub_8044F70;
+ }
+}
+
+static void sub_8044E74(u8 taskId)
+{
+ u16 temp = gTasks[taskId].data[11]++;
+
+ if ((temp & 1) == 0)
+ {
+ gTasks[taskId].data[15]--;
+ if (gTasks[taskId].data[15] < 0)
+ return;
+ REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8);
+ }
+ if (gTasks[taskId].data[15] == 0)
+ gTasks[taskId].func = sub_8044ECC;
+}
+
+static void sub_8044ECC(u8 taskId)
+{
+ u8 sp[6];
+ s32 i;
+
+ gTasks[taskId].data[15]--;
+ if (gTasks[taskId].data[15] == -1)
+ {
+ u8 var = gTasks[taskId].data[1];
+
+ for (i = 0; i < 6; i++)
+ sp[i] = gTasks[taskId].data[3 + i];
+ DestroySpriteAndFreeResources(&gSprites[var]);
+ DestroySpriteAndFreeResources(&gSprites[sp[0]]);
+ for (i = 1; i < 6; i++)
+ DestroySprite(&gSprites[sp[i]]);
+ }
+ else if (gTasks[taskId].data[15] == -3)
+ {
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8044F70(u8 taskId)
+{
+ u8 sp[6];
+ s32 i;
+
+ gTasks[taskId].data[15]--;
+ // Same as above function except with this check.
+ if (gTasks[taskId].data[15] >= 0)
+ {
+ REG_BLDALPHA = (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8);
+ }
+ else if (gTasks[taskId].data[15] == -1)
+ {
+ u8 var = gTasks[taskId].data[1];
+
+ for (i = 0; i < 6; i++)
+ sp[i] = gTasks[taskId].data[3 + i];
+ DestroySpriteAndFreeResources(&gSprites[var]);
+ DestroySpriteAndFreeResources(&gSprites[sp[0]]);
+ for (i = 1; i < 6; i++)
+ DestroySprite(&gSprites[sp[i]]);
+ }
+ else if (gTasks[taskId].data[15] == -3)
+ {
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8045030(struct Sprite *sprite)
+{
+ if (sprite->pos2.x != 0)
+ sprite->pos2.x += sprite->data0;
+}
+
+static void sub_8045048(struct Sprite *sprite)
+{
+ sprite->data1 += 32;
+ if (sprite->data0 > 0)
+ sprite->pos2.x += sprite->data1 >> 4;
+ else
+ sprite->pos2.x -= sprite->data1 >> 4;
+ sprite->data1 &= 0xF;
+}
+
+void sub_804507C(struct Sprite *sprite)
+{
+ u8 r3;
+ u16 r2;
+ s8 pan;
+
+ if (sprite->data1 > 0)
+ {
+ sprite->data1--;
+ return;
+ }
+ r3 = sprite->data2;
+ r2 = sprite->data3;
+ r2 += 56;
+ sprite->data3 = r2 & 0xFFF0;
+ if (r3 != 0)
+ {
+ sprite->pos2.x += r2 >> 4;
+ if (sprite->pos2.x > 0)
+ sprite->pos2.x = 0;
+ }
+ else
+ {
+ sprite->pos2.x -= r2 >> 4;
+ if (sprite->pos2.x < 0)
+ sprite->pos2.x = 0;
+ }
+ if (sprite->pos2.x == 0)
+ {
+ pan = 63;
+ if (r3 != 0)
+ pan = -64;
+ if (sprite->data7 != 0)
+ PlaySE2WithPanning(SE_TB_KARA, pan);
+ else
+ PlaySE1WithPanning(SE_TB_KON, pan);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void sub_8045110(struct Sprite *sprite)
+{
+ u8 r0;
+ u16 r2;
+
+ if (sprite->data1 > 0)
+ {
+ sprite->data1--;
+ return;
+ }
+ r0 = sprite->data2;
+ r2 = sprite->data3;
+ r2 += 56;
+ sprite->data3 = r2 & 0xFFF0;
+ if (r0 != 0)
+ sprite->pos2.x += r2 >> 4;
+ else
+ sprite->pos2.x -= r2 >> 4;
+ if (sprite->pos2.x + sprite->pos1.x > 248
+ || sprite->pos2.x + sprite->pos1.x < -8)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void sub_8045180(struct Sprite *sprite)
+{
+ u8 spriteId = sprite->data0;
+
+ sprite->pos2.x = gSprites[spriteId].pos2.x;
+ sprite->pos2.y = gSprites[spriteId].pos2.y;
+}
+
+static void sub_80451A0(u8 a, struct Pokemon *pkmn)
+{
+ u8 nickname[POKEMON_NAME_LENGTH];
+ u8 gender;
+ u16 species;
+ u8 language;
+ u8 *ptr;
+ s32 i;
+ s32 _7;
+ u8 *const *r1;
+
+ StringCopy(gUnknown_020238CC, gUnknown_0820A8B0);
+ GetMonData(pkmn, MON_DATA_NICKNAME, nickname);
+ StringGetEnd10(nickname);
+ ptr = StringCopy(gUnknown_020238CC + 3, nickname);
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
+ ptr[1] = 3;
+ ptr[2] = 2;
+ ptr[3] = EXT_CTRL_CODE_BEGIN;
+ ptr[4] = 1;
+ ptr += 5;
+ gender = GetMonGender(pkmn);
+ species = GetMonData(pkmn, MON_DATA_SPECIES);
+ language = GetMonData(pkmn, MON_DATA_LANGUAGE);
+ if (sub_8040D3C(species, nickname, language))
+ gender = 100;
+ switch (gender)
+ {
+ default:
+ ptr[0] = 0xB;
+ ptr[1] = EOS;
+ ptr += 1;
+ break;
+ case MON_MALE:
+ ptr[0] = 0xB;
+ ptr[1] = CHAR_MALE;
+ ptr[2] = EOS;
+ ptr += 2;
+ break;
+ case MON_FEMALE:
+ ptr[0] = 0xA;
+ ptr[1] = CHAR_FEMALE;
+ ptr[2] = EOS;
+ ptr += 2;
+ break;
+ }
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
+ ptr[1] = 0x13;
+ ptr[2] = 0x37;
+ ptr[3] = EOS;
+ ptr = (u8 *)0x02000520 + battle_get_per_side_status(gSprites[a].data6) * 0x180;
+ sub_80034D4(ptr, gUnknown_020238CC);
+
+ i = 0;
+ _7 = 7;
+ if (GetMonData(pkmn, MON_DATA_LANGUAGE) == 1
+ && GetMonData(pkmn, MON_DATA_IS_EGG) == 0)
+ {
+ u8 *p = gUnknown_020238CC;
+
+ while (*p != EOS)
+ {
+ if (*p == EXT_CTRL_CODE_BEGIN)
+ {
+ p += GetExtCtrlCodeLength(p[1]) + 1;
+ }
+ else
+ {
+ u8 r0;
+
+ if ((*p >= 0x37 && *p <= 0x4A) || (*p >= 0x87 && *p <= 0x9A))
+ r0 = 0x2C;
+ else if ((*p >= 0x4B && *p <= 0x4F) || (*p >= 0x9B && *p <= 0x9F))
+ r0 = 0x2D;
+ else
+ r0 = 0x2B;
+
+ CpuCopy32(sub_8043CDC(r0), ptr + 0x40 * i, 32);
+ i++;
+ p++;
+ }
+ }
+ }
+
+ for (; i < _7; i++)
+ CpuCopy32(sub_8043CDC(0x2B), ptr + 64 * i, 32);
+
+ if (battle_side_get_owner(gSprites[a].data6) == 0 && !IsDoubleBattle())
+ {
+ r1 = (u8 *const *)gUnknown_0820A8B4;
+ for (i = 0; i < _7; i++)
+ {
+ u8 *r4 = r1[i];
+
+ r4 += gSprites[a].oam.tileNum * 32;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+
+ r4 += 0x100;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+ }
+ }
+ else
+ {
+ if (battle_side_get_owner(gSprites[a].data6) == 0)
+ r1 = (u8 *const *)gUnknown_0820A904;
+ else
+ r1 = (u8 *const *)gUnknown_0820A8DC;
+ for (i = 0; i < _7; i++)
+ {
+ u8 *r4 = r1[i];
+
+ r4 += gSprites[a].oam.tileNum * 32;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+
+ r4 += 0x100;
+ CpuCopy32(ptr, r4, 32);
+ ptr += 32;
+ }
+ }
+}
+
+static void sub_8045458(u8 a, u8 b)
+{
+ u8 r4;
+
+ if (gBattleTypeFlags & 0x200)
+ return;
+ if (gBattleTypeFlags & 8)
+ return;
+
+ r4 = gSprites[a].data6;
+ if (battle_side_get_owner(r4) != 0)
+ {
+ u16 species = GetMonData(&gEnemyParty[gUnknown_02024A6A[r4]], MON_DATA_SPECIES);
+ if (sub_8090D90(SpeciesToNationalPokedexNum(species), 1) != 0)
+ {
+ r4 = gSprites[a].data5;
+ if (b != 0)
+ CpuCopy32(sub_8043CDC(0x46), (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32);
+ else
+ CpuFill32(0, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 8) * 32), 32);
+ }
+ }
+}
+
+static void draw_status_ailment_maybe(u8 a)
+{
+ s32 r4;
+ s32 r4_2;
+ u8 r7;
+ u8 r10;
+ s16 r8;
+ const u8 *r6;
+ u8 r0;
+ s32 i;
+
+ r7 = gSprites[a].data6;
+ r10 = gSprites[a].data5;
+ if (battle_side_get_owner(r7) == 0)
+ {
+ r4 = GetMonData(&gPlayerParty[gUnknown_02024A6A[r7]], MON_DATA_STATUS);
+ if (!IsDoubleBattle())
+ r8 = 0x1A;
+ else
+ r8 = 0x12;
+ }
+ else
+ {
+ r4 = GetMonData(&gEnemyParty[gUnknown_02024A6A[r7]], MON_DATA_STATUS);
+ r8 = 0x11;
+ }
+ if (r4 & 7)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x1B, r7));
+ r0 = 2;
+ }
+ else if (r4 & 0x88)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x15, r7));
+ r0 = 0;
+ }
+ else if (r4 & 0x10)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x21, r7));
+ r0 = 4;
+ }
+ else if (r4 & 0x20)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x1E, r7));
+ r0 = 3;
+ }
+ else if (r4 & 0x40)
+ {
+ r6 = sub_8043CDC(sub_80457E8(0x18, r7));
+ r0 = 1;
+ }
+ else
+ {
+ r6 = sub_8043CDC(0x27);
+
+ for (i = 0; i < 3; i++)
+ CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32), 32);
+
+ if (!ewram17800[r7].bit_4)
+ CpuCopy32(sub_8043CDC(1), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 64);
+
+ sub_8045458(a, 1);
+ return;
+ }
+
+ r4_2 = gSprites[a].oam.paletteNum * 16;
+ r4_2 += r7 + 12;
+ // I don't like writing the array index like this, but I can't get it to match otherwise.
+ FillPalette(r0[gBattleInterfaceStatusIcons_DynPal], r4_2 + 0x100, 2);
+ CpuCopy16(gPlttBufferUnfaded + 0x100 + r4_2, (void *)(OBJ_PLTT + r4_2 * 2), 2);
+ CpuCopy32(r6, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32), 96);
+ if (IsDoubleBattle() == TRUE || battle_side_get_owner(r7) == TRUE)
+ {
+ if (!ewram17800[r7].bit_4)
+ {
+ CpuCopy32(sub_8043CDC(0), (void *)(OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32), 32);
+ CpuCopy32(sub_8043CDC(0x41), (void *)(OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32), 32);
+ }
+ }
+ sub_8045458(a, 0);
+}
+
+static u8 sub_80457E8(u8 a, u8 b)
+{
+ u8 ret = a;
+
+ switch (a)
+ {
+ case 21:
+ if (b == 0)
+ ret = 21;
+ else if (b == 1)
+ ret = 71;
+ else if (b == 2)
+ ret = 86;
+ else
+ ret = 101;
+ break;
+ case 24:
+ if (b == 0)
+ ret = 24;
+ else if (b == 1)
+ ret = 74;
+ else if (b == 2)
+ ret = 89;
+ else
+ ret = 104;
+ break;
+ case 27:
+ if (b == 0)
+ ret = 27;
+ else if (b == 1)
+ ret = 77;
+ else if (b == 2)
+ ret = 92;
+ else
+ ret = 107;
+ break;
+ case 30:
+ if (b == 0)
+ ret = 30;
+ else if (b == 1)
+ ret = 80;
+ else if (b == 2)
+ ret = 95;
+ else
+ ret = 110;
+ break;
+ case 33:
+ if (b == 0)
+ ret = 33;
+ else if (b == 1)
+ ret = 83;
+ else if (b == 2)
+ ret = 98;
+ else
+ ret = 113;
+ break;
+ }
+ return ret;
+}
+
+static void sub_80458B0(u8 a)
+{
+ u8 *r6;
+ u8 r8;
+ u8 i;
+ s32 r7;
+ u8 *addr;
+
+ r6 = (u8 *)0x02000520 + battle_get_per_side_status(gSprites[a].data6) * 0x180;
+ r8 = 7;
+ sub_80034D4(r6, BattleText_SafariBalls);
+ for (i = 0; i < r8; i++)
+ CpuCopy32(sub_8043CDC(0x2B), r6 + i * 64, 32);
+ for (r7 = 3; r7 < 3 + r8; r7++)
+ {
+ addr = (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + MACRO1(r7)) * 32);
+ CpuCopy32(r6, addr, 32);
+ r6 += 32;
+
+ addr = (void *)(OBJ_VRAM0 + (8 + gSprites[a].oam.tileNum + MACRO1(r7)) * 32);
+ CpuCopy32(r6, addr, 32);
+ r6 += 32;
+ }
+
+}
+
+static void sub_8045998(u8 a)
+{
+ u8 *r7;
+ u8 status;
+ s32 r6;
+ s32 i;
+
+ r7 = StringCopy(gUnknown_020238CC, BattleText_SafariBallsLeft);
+ r7 = sub_8003504(r7, gNumSafariBalls, 10, 1);
+ StringAppend(r7, BattleText_HighlightRed);
+ status = battle_get_per_side_status(gSprites[a].data6);
+ r7 = (u8 *)0x02000520 + status * 0x180;
+ r6 = 5;
+ sub_80034D4(r7, gUnknown_020238CC);
+ r7 = (u8 *)0x02000520 + status * 0x180 + 32;
+ for (i = 6; i < 6 + r6; i++)
+ {
+ CpuCopy32(r7, (void *)(OBJ_VRAM0 + (gSprites[a].oam.tileNum + 0x18 + MACRO1(i)) * 32), 32);
+ r7 += 64;
+ }
+}
+
+void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c)
+{
+ u8 r10;
+ u32 maxhp;
+ u32 currhp;
+
+ r10 = gSprites[a].data6;
+ if (battle_side_get_owner(r10) == 0)
+ {
+ if (c == 3 || c == 0)
+ sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL));
+ if (c == 1 || c == 0)
+ sub_80440EC(a, GetMonData(pkmn, MON_DATA_HP), 0);
+ if (c == 2 || c == 0)
+ sub_80440EC(a, GetMonData(pkmn, MON_DATA_MAX_HP), 1);
+ if (c == 5 || c == 0)
+ {
+ load_gfxc_health_bar(0);
+ maxhp = GetMonData(pkmn, MON_DATA_MAX_HP);
+ currhp = GetMonData(pkmn, MON_DATA_HP);
+ sub_8043D84(r10, a, maxhp, currhp, 0);
+ sub_8045C78(r10, a, 0, 0);
+ }
+ if (!IsDoubleBattle() && (c == 6 || c == 0))
+ {
+ u16 species;
+ u8 level;
+ u32 exp;
+ u32 var1;
+ u32 var2;
+ u32 currLevelExp;
+
+ load_gfxc_health_bar(3);
+ species = GetMonData(pkmn, MON_DATA_SPECIES);
+ level = GetMonData(pkmn, MON_DATA_LEVEL);
+ exp = GetMonData(pkmn, MON_DATA_EXP);
+ currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ var1 = exp - currLevelExp;
+ var2 = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp;
+ sub_8043D84(r10, a, var2, var1, 0);
+ sub_8045C78(r10, a, 1, 0);
+ }
+ if (c == 4 || c == 0)
+ sub_80451A0(a, pkmn);
+ if (c == 9 || c == 0)
+ draw_status_ailment_maybe(a);
+ if (c == 10)
+ sub_80458B0(a);
+ if (c == 10 || c == 11)
+ sub_8045998(a);
+ }
+ else
+ {
+ if (c == 3 || c == 0)
+ sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL));
+ if (c == 5 || c == 0)
+ {
+ load_gfxc_health_bar(0);
+ maxhp = GetMonData(pkmn, MON_DATA_MAX_HP);
+ currhp = GetMonData(pkmn, MON_DATA_HP);
+ sub_8043D84(r10, a, maxhp, currhp, 0);
+ sub_8045C78(r10, a, 0, 0);
+ }
+ if (c == 4 || c == 0)
+ sub_80451A0(a, pkmn);
+ if (c == 9 || c == 0)
+ draw_status_ailment_maybe(a);
+ }
+}
+
+s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2)
+{
+ s32 r6;
+
+ if (c == 0)
+ {
+ r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, 6, 1);
+ }
+ else
+ {
+ u16 r5;
+ s32 r8;
+
+ r5 = GetScaledExpFraction(ewram17850[a].unk8, ewram17850[a].unkC, ewram17850[a].unk4, 8);
+ if (r5 == 0)
+ r5 = 1;
+ r8 = ewram17850[a].unkC;
+ r5 = ABS(r8 / r5);
+ r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, r8, &ewram17850[a].unk10, 8, r5);
+ }
+ if (c == 1 || (c == 0 && (!ewram17800[a].bit_4)))
+ sub_8045D58(a, c);
+ if (r6 == -1)
+ ewram17850[a].unk10 = 0;
+ return r6;
+}
+
+static void sub_8045D58(u8 a, u8 b)
+{
+ u8 sp8[7];
+ u8 r0;
+ u8 r8;
+ u8 i;
+
+ switch (b)
+ {
+ case 0:
+ r0 = sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 6);
+ r8 = 3;
+ if (r0 <= 0x18)
+ {
+ r8 = 0x38;
+ if (r0 > 9)
+ r8 = 0x2F;
+ }
+ for (i = 0; i < 6; i++)
+ {
+ u8 r4 = gSprites[ewram17850[a].unk0].data5;
+ if (i < 2)
+ CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[r4].oam.tileNum + 2 + i) * 32), 32);
+ else
+ CpuCopy32(sub_8043CDC(r8) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 64 + (i + gSprites[r4].oam.tileNum) * 32), 32);
+ }
+ break;
+ case 1:
+ sub_804602C(ewram17850[a].unk4, ewram17850[a].unk8, ewram17850[a].unkC, &ewram17850[a].unk10, sp8, 8);
+ r0 = GetMonData(&gPlayerParty[gUnknown_02024A6A[a]], MON_DATA_LEVEL);
+ if (r0 == 100)
+ {
+ for (i = 0; i < 8; i++)
+ sp8[i] = 0;
+ }
+ for (i = 0; i < 8; i++)
+ {
+ if (i < 4)
+ CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + (gSprites[ewram17850[a].unk0].oam.tileNum + 0x24 + i) * 32), 32);
+ else
+ CpuCopy32(sub_8043CDC(0xC) + sp8[i] * 32, (void *)(OBJ_VRAM0 + 0xB80 + (i + gSprites[ewram17850[a].unk0].oam.tileNum) * 32), 32);
+ }
+ break;
+ }
+}
+
+static int sub_8045F58(s32 a, s32 b, int c, int *d, u8 e, u16 f)
+{
+ u8 r2 = e << 3;
+ int r6;
+ int ret;
+
+ if (*d == -32768)
+ {
+ if (a < r2)
+ *d = b << 8;
+ else
+ *d = b;
+ }
+ //_08045F8A
+ b -= c;
+ if (b < 0)
+ b = 0;
+ else if (b > a)
+ b = a;
+ if (a < r2)
+ {
+ int var = *d >> 8;
+
+ r6 = *d;
+ if (b == var && (r6 & 0xFF) == 0)
+ return -1;
+ }
+ else
+ {
+ r6 = *d;
+ if (b == r6)
+ return -1;
+ }
+ //_08045FC4
+ if (a < r2)
+ {
+ int r0 = (a << 8) / r2;
+
+ if (c < 0)
+ {
+ *d = r6 + r0;
+ ret = *d >> 8;
+ if (ret >= b)
+ {
+ *d = b << 8;
+ ret = b;
+ }
+ }
+ //_08045FE2
+ else
+ {
+ *d = r6 - r0;
+ ret = *d >> 8;
+ if ((*d & 0xFF) > 0)
+ ret++;
+ if (ret <= b)
+ {
+ *d = b << 8;
+ ret = b;
+ }
+ }
+ }
+ else
+ {
+ //_08045FFE
+ if (c < 0)
+ {
+ *d += f;
+ if (*d > b)
+ *d = b;
+ ret = *d;
+ }
+ //_08046010
+ else
+ {
+ *d -= f;
+ if (*d < b)
+ *d = b;
+ ret = *d;
+ }
+ }
+ return ret;
+}
+
+static u8 sub_804602C(int a, int b, int c, int *d, u8 *e, u8 f)
+{
+ s32 r5 = b - c;
+ u8 r3;
+ u8 i;
+ u8 r2;
+
+ if (r5 < 0)
+ r5 = 0;
+ else if (r5 > a)
+ r5 = a;
+ r3 = f << 3;
+ for (i = 0; i < f; i++)
+ e[i] = 0;
+ if (a < r3)
+ r2 = *d * r3 / a >> 8;
+ else
+ r2 = *d * r3 / a;
+ r3 = r2;
+ if (r3 == 0 && r5 > 0)
+ {
+ e[0] = 1;
+ r3 = 1;
+ }
+ else
+ {
+ for (i = 0; i < f; i++)
+ {
+ if (r2 >= 8)
+ {
+ e[i] = 8;
+ }
+ else
+ {
+ e[i] = r2;
+ break;
+ }
+ r2 -= 8;
+ }
+ }
+ return r3;
+}
+
+s16 sub_80460C8(struct UnknownStruct9 *a, int *b, void *c, int d)
+{
+ u16 r7;
+ s16 r1;
+
+ r7 = sub_8045F58(a->unk0, a->unk4, a->unk8, b, 6, 1);
+ sub_8046128(a, b, c);
+ if (a->unk0 < 0x30)
+ r1 = *b >> 8;
+ else
+ r1 = *b;
+ do_nothing(a->unk0, r1, d);
+ return r7;
+}
+
+static void sub_8046128(struct UnknownStruct9 *a, int *b, void *c)
+{
+ u8 sp8[6];
+ u16 sp10[6];
+ u8 i;
+
+ sub_804602C(a->unk0, a->unk4, a->unk8, b, (u8 *)sp8, 6);
+ for (i = 0; i < 6; i++)
+ sp10[i] = (a->unkC_0 << 12) | (a->unk10 + sp8[i]);
+ CpuCopy16(sp10, c, sizeof(sp10));
+}
+
+static u8 GetScaledExpFraction(int a, int b, int c, u8 d)
+{
+ u8 r7 = d * 8;
+ int r5 = a - b;
+ s8 r4;
+ s8 r0;
+ s32 result;
+
+ if (r5 < 0)
+ r5 = 0;
+ else if (r5 > c)
+ r5 = c;
+
+ r4 = a * r7 / c;
+ r0 = r5 * r7 / c;
+ result = r4 - r0;
+ return ABS(result);
+}
+
+u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale)
+{
+ u8 result = hp * scale / maxhp;
+
+ if (result == 0 && hp > 0)
+ return 1;
+ return result;
+}
+
+int GetHPBarLevel(s16 hp, s16 maxhp)
+{
+ int result;
+
+ if (hp == maxhp)
+ result = 4;
+ else
+ {
+ u8 fraction = GetScaledHPFraction(hp, maxhp, 48);
+ if (fraction > 24)
+ result = 3;
+ else if (fraction > 9)
+ result = 2;
+ else if (fraction > 0)
+ result = 1;
+ else
+ result = 0;
+ }
+ return result;
+}
diff --git a/src/text.c b/src/text.c
index 05f327adf..7be72833a 100644
--- a/src/text.c
+++ b/src/text.c
@@ -2338,7 +2338,7 @@ u8 sub_8003490(struct Window *win, u8 c, u16 tileDataStartOffset, u8 left, u8 to
return retVal;
}
-void sub_80034D4(u8 *tileData, u8 *text)
+void sub_80034D4(u8 *tileData, const u8 *text)
{
sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6C74, tileData, text);
}