diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-05-08 18:52:58 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-05-08 16:52:58 -0700 |
commit | e75c3262f37483d3503126bebf8bf8b7b662d345 (patch) | |
tree | bd8c4561f47417cf4aa33c6da23330cee1f141d0 | |
parent | e6868bbdb2b9a0f00085029817d3a451781973cd (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.s | 5500 | ||||
-rw-r--r-- | data/text/battle_strings.inc | 6 | ||||
-rw-r--r-- | include/songs.h | 6 | ||||
-rw-r--r-- | include/text.h | 5 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle_interface.c | 3076 | ||||
-rw-r--r-- | src/text.c | 2 |
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); } |