diff options
-rw-r--r-- | asm/party_menu.s | 3658 | ||||
-rw-r--r-- | include/battle.h | 2 | ||||
-rw-r--r-- | include/party_menu.h | 25 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_party_menu.c | 2 | ||||
-rw-r--r-- | src/choose_party.c | 7 | ||||
-rw-r--r-- | src/naming_screen.c | 2 | ||||
-rw-r--r-- | src/party_menu.c | 2604 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 2 |
9 files changed, 2589 insertions, 3714 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s deleted file mode 100644 index 2c400dd09..000000000 --- a/asm/party_menu.s +++ /dev/null @@ -1,3658 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_806AEDC -sub_806AEDC: @ 806AEDC - push {r4-r6,lr} - sub sp, 0x4 - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _0806AF2C @ =gUnknown_0202E8FA - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 4 - ldr r1, _0806AF30 @ =gUnknown_08376BB4 - adds r5, r0, r1 - movs r6, 0 -_0806AEF8: - ldrb r0, [r5] - lsls r0, 3 - ldrb r1, [r5, 0x1] - lsls r1, 3 - ldr r2, [r5, 0x4] - lsls r3, r6, 5 - movs r4, 0x80 - lsls r4, 2 - orrs r3, r4 - str r3, [sp] - movs r3, 0 - bl sub_800142C - adds r5, 0x8 - adds r6, 0x1 - cmp r6, 0x5 - ble _0806AEF8 - bl RunTasks - bl UpdatePaletteFade - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0806AF2C: .4byte gUnknown_0202E8FA -_0806AF30: .4byte gUnknown_08376BB4 - thumb_func_end sub_806AEDC - - thumb_func_start sub_806AF34 -sub_806AF34: @ 806AF34 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl sub_806B548 - pop {r0} - bx r0 - thumb_func_end sub_806AF34 - - thumb_func_start sub_806AF4C -sub_806AF4C: @ 806AF4C - push {r4,r5,lr} - adds r4, r2, 0 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r3, 24 - lsrs r3, 24 - cmp r1, 0xFF - beq _0806AF64 - ldr r0, _0806AF84 @ =gBattleTypeFlags - strh r1, [r0] -_0806AF64: - ldr r0, _0806AF88 @ =0x0201b000 - movs r5, 0x96 - lsls r5, 2 - adds r1, r0, r5 - strb r2, [r1] - movs r2, 0x97 - lsls r2, 2 - adds r1, r0, r2 - str r4, [r1] - adds r5, 0x1 - adds r0, r5 - strb r3, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806AF84: .4byte gBattleTypeFlags -_0806AF88: .4byte 0x0201b000 - thumb_func_end sub_806AF4C - - thumb_func_start sub_806AF8C -sub_806AF8C: @ 806AF8C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r3, 24 - lsrs r3, 24 - bl sub_806AF4C - ldr r0, _0806AFA8 @ =sub_806B460 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_0806AFA8: .4byte sub_806B460 - thumb_func_end sub_806AF8C - - thumb_func_start OpenPartyMenu -OpenPartyMenu: @ 806AFAC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _0806AFCC @ =gUnknown_08376C74 - lsls r3, r0, 1 - adds r3, r0 - lsls r3, 2 - adds r3, r2 - ldr r2, [r3] - ldrb r3, [r3, 0x8] - bl sub_806AF8C - pop {r0} - bx r0 - .align 2, 0 -_0806AFCC: .4byte gUnknown_08376C74 - thumb_func_end OpenPartyMenu - - thumb_func_start sub_806AFD0 -sub_806AFD0: @ 806AFD0 - push {r4,r5,lr} - ldr r1, _0806AFF0 @ =0x0201b000 - movs r2, 0x99 - lsls r2, 2 - adds r0, r1, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - adds r4, r1, 0 - cmp r0, 0x9 - bls _0806AFE6 - b _0806B11A -_0806AFE6: - lsls r0, 2 - ldr r1, _0806AFF4 @ =_0806AFF8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806AFF0: .4byte 0x0201b000 -_0806AFF4: .4byte _0806AFF8 - .align 2, 0 -_0806AFF8: - .4byte _0806B020 - .4byte _0806B060 - .4byte _0806B066 - .4byte _0806B07A - .4byte _0806B0A4 - .4byte _0806B0AA - .4byte _0806B0BC - .4byte _0806B0C2 - .4byte _0806B0D4 - .4byte _0806B0EC -_0806B020: - ldr r0, _0806B048 @ =0x00000266 - adds r5, r4, r0 - movs r1, 0 - ldrsh r3, [r5, r1] - ldr r0, _0806B04C @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r3, r0 - bge _0806B054 - movs r2, 0x98 - lsls r2, 2 - adds r0, r4, r2 - ldrb r0, [r0] - ldrb r1, [r5] - movs r2, 0x64 - muls r2, r3 - ldr r3, _0806B050 @ =gPlayerParty - adds r2, r3 - bl TryCreatePartyMenuMonIcon - b _0806B114 - .align 2, 0 -_0806B048: .4byte 0x00000266 -_0806B04C: .4byte gPlayerPartyCount -_0806B050: .4byte gPlayerParty -_0806B054: - movs r0, 0 - strh r0, [r5] - movs r0, 0x99 - lsls r0, 2 - adds r1, r4, r0 - b _0806B0E0 -_0806B060: - bl LoadHeldItemIconGraphics - b _0806B0D8 -_0806B066: - movs r1, 0x98 - lsls r1, 2 - adds r0, r4, r1 - ldrb r0, [r0] - bl CreateHeldItemIcons_806DC34 - movs r2, 0x99 - lsls r2, 2 - adds r1, r4, r2 - b _0806B0E0 -_0806B07A: - movs r1, 0x98 - lsls r1, 2 - adds r0, r4, r1 - ldrb r0, [r0] - ldr r2, _0806B0A0 @ =0x00000266 - adds r5, r4, r2 - ldrb r1, [r5] - bl sub_806BD58 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B114 - movs r0, 0 - strh r0, [r5] - movs r0, 0x99 - lsls r0, 2 - adds r1, r4, r0 - b _0806B0E0 - .align 2, 0 -_0806B0A0: .4byte 0x00000266 -_0806B0A4: - bl PartyMenuPrintMonsLevelOrStatus - b _0806B0D8 -_0806B0AA: - bl PrintPartyMenuMonNicknames - ldr r1, _0806B0B8 @ =0x0201b000 - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - b _0806B0E0 - .align 2, 0 -_0806B0B8: .4byte 0x0201b000 -_0806B0BC: - bl PartyMenuTryPrintMonsHP - b _0806B0D8 -_0806B0C2: - bl nullsub_13 - ldr r1, _0806B0D0 @ =0x0201b000 - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - b _0806B0E0 - .align 2, 0 -_0806B0D0: .4byte 0x0201b000 -_0806B0D4: - bl PartyMenuDrawHPBars -_0806B0D8: - ldr r1, _0806B0E8 @ =0x0201b000 - movs r2, 0x99 - lsls r2, 2 - adds r1, r2 -_0806B0E0: - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _0806B11A - .align 2, 0 -_0806B0E8: .4byte 0x0201b000 -_0806B0EC: - ldr r0, _0806B110 @ =0x00000266 - adds r5, r4, r0 - ldrb r0, [r5] - bl sub_806B58C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B114 - movs r1, 0 - strh r1, [r5] - movs r2, 0x99 - lsls r2, 2 - adds r0, r4, r2 - strh r1, [r0] - movs r0, 0x1 - b _0806B11C - .align 2, 0 -_0806B110: .4byte 0x00000266 -_0806B114: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] -_0806B11A: - movs r0, 0 -_0806B11C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806AFD0 - - thumb_func_start sub_806B124 -sub_806B124: @ 806B124 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r0, _0806B144 @ =gMain - ldr r1, _0806B148 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x11 - bls _0806B13A - b _0806B450 -_0806B13A: - lsls r0, 2 - ldr r1, _0806B14C @ =_0806B150 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806B144: .4byte gMain -_0806B148: .4byte 0x0000043c -_0806B14C: .4byte _0806B150 - .align 2, 0 -_0806B150: - .4byte _0806B198 - .4byte _0806B240 - .4byte _0806B246 - .4byte _0806B27C - .4byte _0806B282 - .4byte _0806B2AC - .4byte _0806B2B2 - .4byte _0806B2D0 - .4byte _0806B2EC - .4byte _0806B318 - .4byte _0806B344 - .4byte _0806B37C - .4byte _0806B382 - .4byte _0806B3C0 - .4byte _0806B3CC - .4byte _0806B3E4 - .4byte _0806B40C - .4byte _0806B440 -_0806B198: - movs r0, 0 - bl SetVBlankCallback - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r2, sp, 0x8 - mov r8, r2 - add r2, sp, 0x4 - movs r6, 0 - ldr r1, _0806B22C @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _0806B230 @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_0806B1BC: - strh r6, [r2] - add r0, sp, 0x4 - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _0806B1BC - strh r6, [r2] - add r2, sp, 0x4 - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r3, r12 - orrs r0, r3 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0x8] - ldr r2, _0806B22C @ =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - add r0, sp, 0x4 - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r2, _0806B234 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - ldr r1, _0806B238 @ =gMain - ldr r2, _0806B23C @ =0x0000043c - adds r1, r2 - b _0806B42C - .align 2, 0 -_0806B22C: .4byte 0x040000d4 -_0806B230: .4byte 0x81000800 -_0806B234: .4byte gPaletteFade -_0806B238: .4byte gMain -_0806B23C: .4byte 0x0000043c -_0806B240: - bl remove_some_task - b _0806B426 -_0806B246: - bl sub_806B4A8 - ldr r1, _0806B26C @ =0x0201b000 - movs r2, 0x99 - lsls r2, 2 - adds r0, r1, r2 - movs r2, 0 - strh r2, [r0] - ldr r3, _0806B270 @ =0x00000266 - adds r0, r1, r3 - strh r2, [r0] - movs r0, 0x9A - lsls r0, 2 - adds r1, r0 - strh r2, [r1] - ldr r1, _0806B274 @ =gMain - ldr r2, _0806B278 @ =0x0000043c - adds r1, r2 - b _0806B42C - .align 2, 0 -_0806B26C: .4byte 0x0201b000 -_0806B270: .4byte 0x00000266 -_0806B274: .4byte gMain -_0806B278: .4byte 0x0000043c -_0806B27C: - bl ResetSpriteData - b _0806B426 -_0806B282: - ldr r0, _0806B2A0 @ =0x0201b000 - movs r1, 0x96 - lsls r1, 2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0806B298 - cmp r0, 0x5 - beq _0806B298 - bl ResetTasks -_0806B298: - ldr r1, _0806B2A4 @ =gMain - ldr r2, _0806B2A8 @ =0x0000043c - adds r1, r2 - b _0806B42C - .align 2, 0 -_0806B2A0: .4byte 0x0201b000 -_0806B2A4: .4byte gMain -_0806B2A8: .4byte 0x0000043c -_0806B2AC: - bl FreeAllSpritePalettes - b _0806B426 -_0806B2B2: - ldr r4, _0806B2CC @ =0x0201b000 - movs r1, 0x97 - lsls r1, 2 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0 - bl CreateTask - movs r2, 0x98 - lsls r2, 2 - adds r1, r4, r2 - strb r0, [r1] - b _0806B426 - .align 2, 0 -_0806B2CC: .4byte 0x0201b000 -_0806B2D0: - ldr r0, _0806B2E0 @ =gWindowConfig_81E6C90 - bl SetUpWindowConfig - ldr r1, _0806B2E4 @ =gMain - ldr r0, _0806B2E8 @ =0x0000043c - adds r1, r0 - b _0806B42C - .align 2, 0 -_0806B2E0: .4byte gWindowConfig_81E6C90 -_0806B2E4: .4byte gMain -_0806B2E8: .4byte 0x0000043c -_0806B2EC: - ldr r4, _0806B308 @ =gUnknown_03004210 - ldr r1, _0806B30C @ =gWindowConfig_81E6C90 - adds r0, r4, 0 - bl InitWindowFromConfig - adds r0, r4, 0 - movs r1, 0x1 - bl MultistepInitWindowTileData - ldr r1, _0806B310 @ =gMain - ldr r2, _0806B314 @ =0x0000043c - adds r1, r2 - b _0806B42C - .align 2, 0 -_0806B308: .4byte gUnknown_03004210 -_0806B30C: .4byte gWindowConfig_81E6C90 -_0806B310: .4byte gMain -_0806B314: .4byte 0x0000043c -_0806B318: - bl MultistepLoadFont - cmp r0, 0 - bne _0806B322 - b _0806B450 -_0806B322: - ldr r0, _0806B338 @ =0x0201b000 - movs r3, 0x99 - lsls r3, 2 - adds r0, r3 - movs r1, 0x1 - strh r1, [r0] - ldr r1, _0806B33C @ =gMain - ldr r0, _0806B340 @ =0x0000043c - adds r1, r0 - b _0806B42C - .align 2, 0 -_0806B338: .4byte 0x0201b000 -_0806B33C: .4byte gMain -_0806B340: .4byte 0x0000043c -_0806B344: - ldr r0, _0806B368 @ =0x0201b000 - movs r1, 0x99 - lsls r1, 2 - adds r4, r0, r1 - ldrb r0, [r4] - bl LoadPartyMenuGraphics - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B374 - movs r0, 0 - strh r0, [r4] - ldr r1, _0806B36C @ =gMain - ldr r2, _0806B370 @ =0x0000043c - adds r1, r2 - b _0806B42C - .align 2, 0 -_0806B368: .4byte 0x0201b000 -_0806B36C: .4byte gMain -_0806B370: .4byte 0x0000043c -_0806B374: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0806B450 -_0806B37C: - bl sub_809D51C - b _0806B426 -_0806B382: - ldr r2, _0806B3B0 @ =gUnknown_08376C74 - ldr r0, _0806B3B4 @ =0x0201b000 - movs r1, 0x96 - lsls r1, 2 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r2, 0x4 - adds r0, r2 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B450 - ldr r1, _0806B3B8 @ =gMain - ldr r2, _0806B3BC @ =0x0000043c - adds r1, r2 - b _0806B42C - .align 2, 0 -_0806B3B0: .4byte gUnknown_08376C74 -_0806B3B4: .4byte 0x0201b000 -_0806B3B8: .4byte gMain -_0806B3BC: .4byte 0x0000043c -_0806B3C0: - ldr r0, _0806B3C8 @ =gWindowConfig_81E6CC8 - bl MultistepInitMenuWindowBegin - b _0806B426 - .align 2, 0 -_0806B3C8: .4byte gWindowConfig_81E6CC8 -_0806B3CC: - bl MultistepInitMenuWindowContinue - cmp r0, 0 - beq _0806B450 - ldr r1, _0806B3DC @ =gMain - ldr r0, _0806B3E0 @ =0x0000043c - adds r1, r0 - b _0806B42C - .align 2, 0 -_0806B3DC: .4byte gMain -_0806B3E0: .4byte 0x0000043c -_0806B3E4: - ldr r0, _0806B3FC @ =0x0201b000 - ldr r1, _0806B400 @ =0x00000259 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - bl sub_806D538 - ldr r1, _0806B404 @ =gMain - ldr r2, _0806B408 @ =0x0000043c - adds r1, r2 - b _0806B42C - .align 2, 0 -_0806B3FC: .4byte 0x0201b000 -_0806B400: .4byte 0x00000259 -_0806B404: .4byte gMain -_0806B408: .4byte 0x0000043c -_0806B40C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r2, _0806B434 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] -_0806B426: - ldr r1, _0806B438 @ =gMain - ldr r3, _0806B43C @ =0x0000043c - adds r1, r3 -_0806B42C: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0806B450 - .align 2, 0 -_0806B434: .4byte gPaletteFade -_0806B438: .4byte gMain -_0806B43C: .4byte 0x0000043c -_0806B440: - ldr r0, _0806B44C @ =sub_806AF34 - bl SetVBlankCallback - movs r0, 0x1 - b _0806B452 - .align 2, 0 -_0806B44C: .4byte sub_806AF34 -_0806B450: - movs r0, 0 -_0806B452: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806B124 - - thumb_func_start sub_806B460 -sub_806B460: @ 806B460 - push {lr} - b _0806B470 -_0806B464: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806B49C -_0806B470: - bl sub_806B124 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B464 - ldr r1, _0806B4A0 @ =0x0201b000 - movs r2, 0x96 - lsls r2, 2 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x5 - beq _0806B496 - adds r2, 0x8 - adds r0, r1, r2 - ldrb r0, [r0] - movs r1, 0 - bl sub_806BF74 -_0806B496: - ldr r0, _0806B4A4 @ =sub_806AEDC - bl SetMainCallback2 -_0806B49C: - pop {r0} - bx r0 - .align 2, 0 -_0806B4A0: .4byte 0x0201b000 -_0806B4A4: .4byte sub_806AEDC - thumb_func_end sub_806B460 - - thumb_func_start sub_806B4A8 -sub_806B4A8: @ 806B4A8 - push {lr} - movs r0, 0 - bl SetHBlankCallback - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xFA - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x8 - ldr r2, _0806B50C @ =0x00001e05 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _0806B510 @ =0x00000703 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _0806B514 @ =0x00000f08 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _0806B518 @ =0x00000602 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0806B51C @ =REG_BLDCNT - movs r1, 0 - strh r1, [r0] - subs r0, 0x40 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r2, _0806B520 @ =REG_BG3VOFS - strh r1, [r2] - ldr r1, _0806B524 @ =0x0000ffff - adds r0, r1, 0 - strh r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_0806B50C: .4byte 0x00001e05 -_0806B510: .4byte 0x00000703 -_0806B514: .4byte 0x00000f08 -_0806B518: .4byte 0x00000602 -_0806B51C: .4byte REG_BLDCNT -_0806B520: .4byte REG_BG3VOFS -_0806B524: .4byte 0x0000ffff - thumb_func_end sub_806B4A8 - - thumb_func_start IsLinkDoubleBattle -IsLinkDoubleBattle: @ 806B528 - push {lr} - ldr r0, _0806B53C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x4B - ands r0, r1 - cmp r0, 0x4B - beq _0806B540 - movs r0, 0 - b _0806B542 - .align 2, 0 -_0806B53C: .4byte gBattleTypeFlags -_0806B540: - movs r0, 0x1 -_0806B542: - pop {r1} - bx r1 - thumb_func_end IsLinkDoubleBattle - - thumb_func_start sub_806B548 -sub_806B548: @ 806B548 - push {r4,lr} - ldr r0, _0806B574 @ =0x0201b000 - ldr r1, _0806B578 @ =0x00000261 - adds r4, r0, r1 - ldrb r3, [r4] - cmp r3, 0 - beq _0806B56E - ldr r1, _0806B57C @ =gBGTilemapBuffers + 0x1000 - ldr r2, _0806B580 @ =0x06003000 - ldr r0, _0806B584 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _0806B588 @ =0x80000400 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - cmp r3, 0x2 - bne _0806B56E - movs r0, 0 - strb r0, [r4] -_0806B56E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806B574: .4byte 0x0201b000 -_0806B578: .4byte 0x00000261 -_0806B57C: .4byte gBGTilemapBuffers + 0x1000 -_0806B580: .4byte 0x06003000 -_0806B584: .4byte 0x040000d4 -_0806B588: .4byte 0x80000400 - thumb_func_end sub_806B548 - - thumb_func_start sub_806B58C -sub_806B58C: @ 806B58C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl IsDoubleBattle - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0806B5A8 - ldr r0, _0806B5A4 @ =gUnknown_0202E8FA - strb r2, [r0] - b _0806B5C8 - .align 2, 0 -_0806B5A4: .4byte gUnknown_0202E8FA -_0806B5A8: - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B5C0 - ldr r1, _0806B5BC @ =gUnknown_0202E8FA - movs r0, 0x2 - b _0806B5C4 - .align 2, 0 -_0806B5BC: .4byte gUnknown_0202E8FA -_0806B5C0: - ldr r1, _0806B5E4 @ =gUnknown_0202E8FA - movs r0, 0x1 -_0806B5C4: - strb r0, [r1] - adds r0, r1, 0 -_0806B5C8: - ldrb r0, [r0] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r0, _0806B5E8 @ =gUnknown_083769A8 - adds r4, r1, r0 - cmp r5, 0x8 - bls _0806B5DA - b _0806B900 -_0806B5DA: - lsls r0, r5, 2 - ldr r1, _0806B5EC @ =_0806B5F0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806B5E4: .4byte gUnknown_0202E8FA -_0806B5E8: .4byte gUnknown_083769A8 -_0806B5EC: .4byte _0806B5F0 - .align 2, 0 -_0806B5F0: - .4byte _0806B614 - .4byte _0806B628 - .4byte _0806B638 - .4byte _0806B694 - .4byte _0806B71A - .4byte _0806B7A2 - .4byte _0806B832 - .4byte _0806B8C6 - .4byte _0806B8E8 -_0806B614: - ldr r0, _0806B624 @ =gBGTilemapBuffers + 0x1000 - movs r2, 0x80 - lsls r2, 4 - movs r1, 0 - bl memset - b _0806B900 - .align 2, 0 -_0806B624: .4byte gBGTilemapBuffers + 0x1000 -_0806B628: - ldrb r0, [r4] - ldrb r1, [r4, 0x1] - movs r2, 0x3 - bl sub_806B9A4 - adds r0, r4, 0 - movs r1, 0 - b _0806B8A8 -_0806B638: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _0806B666 - ldr r0, _0806B65C @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x1 - bls _0806B660 - ldrb r0, [r4, 0x2] - ldrb r1, [r4, 0x3] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0x2 - movs r1, 0x1 - b _0806B8A8 - .align 2, 0 -_0806B65C: .4byte gPlayerPartyCount -_0806B660: - ldrb r0, [r4, 0x2] - ldrb r1, [r4, 0x3] - b _0806B8BC -_0806B666: - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B684 - ldrb r0, [r4, 0x2] - ldrb r1, [r4, 0x3] - movs r2, 0x4 - bl sub_806B9A4 - adds r0, r4, 0x2 - movs r1, 0x1 - movs r2, 0x4 - b _0806B8AA -_0806B684: - ldrb r0, [r4, 0x2] - ldrb r1, [r4, 0x3] - movs r2, 0x3 - bl sub_806B9A4 - adds r0, r4, 0x2 - movs r1, 0x1 - b _0806B8A8 -_0806B694: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _0806B6C2 - ldr r0, _0806B6B8 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x2 - bls _0806B6BC - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0x4 - movs r1, 0x2 - b _0806B8A8 - .align 2, 0 -_0806B6B8: .4byte gPlayerPartyCount -_0806B6BC: - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - b _0806B8BC -_0806B6C2: - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B6F6 - ldr r0, _0806B6EC @ =gPlayerParty + 2 * 0x64 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806B6F0 - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0x4 - movs r1, 0x2 - b _0806B8A8 - .align 2, 0 -_0806B6EC: .4byte gPlayerParty + 2 * 0x64 -_0806B6F0: - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - b _0806B8BC -_0806B6F6: - ldr r0, _0806B710 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x2 - bls _0806B714 - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0x4 - movs r1, 0x2 - b _0806B8A8 - .align 2, 0 -_0806B710: .4byte gPlayerPartyCount -_0806B714: - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - b _0806B8BC -_0806B71A: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _0806B74A - ldr r0, _0806B740 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x3 - bls _0806B744 - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0x6 - movs r1, 0x3 - b _0806B8A8 - .align 2, 0 -_0806B740: .4byte gPlayerPartyCount -_0806B744: - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - b _0806B8BC -_0806B74A: - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B77E - ldr r0, _0806B774 @ =gPlayerParty + 3 * 0x64 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806B778 - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0x6 - movs r1, 0x3 - b _0806B8A8 - .align 2, 0 -_0806B774: .4byte gPlayerParty + 3 * 0x64 -_0806B778: - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - b _0806B8BC -_0806B77E: - ldr r0, _0806B798 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x3 - bls _0806B79C - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0x6 - movs r1, 0x3 - b _0806B8A8 - .align 2, 0 -_0806B798: .4byte gPlayerPartyCount -_0806B79C: - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - b _0806B8BC -_0806B7A2: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _0806B7D2 - ldr r0, _0806B7C8 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x4 - bls _0806B7CC - ldrb r0, [r4, 0x8] - ldrb r1, [r4, 0x9] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0 - adds r0, 0x8 - movs r1, 0x4 - b _0806B8A8 - .align 2, 0 -_0806B7C8: .4byte gPlayerPartyCount -_0806B7CC: - ldrb r0, [r4, 0x8] - ldrb r1, [r4, 0x9] - b _0806B8BC -_0806B7D2: - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B80A - ldr r0, _0806B800 @ =gPlayerParty + 4 * 0x64 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806B804 - ldrb r0, [r4, 0x8] - ldrb r1, [r4, 0x9] - movs r2, 0 - movs r3, 0x4 - bl sub_806BA94 - adds r0, r4, 0 - adds r0, 0x8 - movs r1, 0x4 - movs r2, 0x4 - b _0806B8AA - .align 2, 0 -_0806B800: .4byte gPlayerParty + 4 * 0x64 -_0806B804: - ldrb r0, [r4, 0x8] - ldrb r1, [r4, 0x9] - b _0806B884 -_0806B80A: - ldr r0, _0806B828 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x4 - bls _0806B82C - ldrb r0, [r4, 0x8] - ldrb r1, [r4, 0x9] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0 - adds r0, 0x8 - movs r1, 0x4 - b _0806B8A8 - .align 2, 0 -_0806B828: .4byte gPlayerPartyCount -_0806B82C: - ldrb r0, [r4, 0x8] - ldrb r1, [r4, 0x9] - b _0806B8BC -_0806B832: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _0806B84C - ldr r0, _0806B848 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x5 - bhi _0806B896 - b _0806B8B8 - .align 2, 0 -_0806B848: .4byte gPlayerPartyCount -_0806B84C: - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806B88E - ldr r0, _0806B87C @ =gPlayerParty + 5 * 0x64 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806B880 - ldrb r0, [r4, 0xA] - ldrb r1, [r4, 0xB] - movs r2, 0 - movs r3, 0x4 - bl sub_806BA94 - adds r0, r4, 0 - adds r0, 0xA - movs r1, 0x5 - movs r2, 0x4 - b _0806B8AA - .align 2, 0 -_0806B87C: .4byte gPlayerParty + 5 * 0x64 -_0806B880: - ldrb r0, [r4, 0xA] - ldrb r1, [r4, 0xB] -_0806B884: - movs r2, 0x1 - movs r3, 0x4 - bl sub_806BA94 - b _0806B900 -_0806B88E: - ldr r0, _0806B8B4 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x5 - bls _0806B8B8 -_0806B896: - ldrb r0, [r4, 0xA] - ldrb r1, [r4, 0xB] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - adds r0, r4, 0 - adds r0, 0xA - movs r1, 0x5 -_0806B8A8: - movs r2, 0x3 -_0806B8AA: - movs r3, 0 - bl sub_806BF24 - b _0806B900 - .align 2, 0 -_0806B8B4: .4byte gPlayerPartyCount -_0806B8B8: - ldrb r0, [r4, 0xA] - ldrb r1, [r4, 0xB] -_0806B8BC: - movs r2, 0x1 - movs r3, 0x3 - bl sub_806BA94 - b _0806B900 -_0806B8C6: - ldr r0, _0806B8E4 @ =0x0201b000 - movs r1, 0x96 - lsls r1, 2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x4 - bne _0806B8DA - movs r0, 0x1 - bl sub_806BB9C -_0806B8DA: - movs r0, 0x1 - bl sub_806BBEC - b _0806B900 - .align 2, 0 -_0806B8E4: .4byte 0x0201b000 -_0806B8E8: - ldr r0, _0806B8F8 @ =0x0201b000 - ldr r1, _0806B8FC @ =0x00000261 - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - movs r0, 0x1 - b _0806B902 - .align 2, 0 -_0806B8F8: .4byte 0x0201b000 -_0806B8FC: .4byte 0x00000261 -_0806B900: - movs r0, 0 -_0806B902: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806B58C - - thumb_func_start sub_806B908 -sub_806B908: @ 806B908 - push {r4,r5,lr} - ldr r0, _0806B948 @ =gBGTilemapBuffers + 0x1000 - movs r2, 0x80 - lsls r2, 4 - movs r1, 0 - bl memset - ldr r1, _0806B94C @ =gUnknown_0202E8FA - movs r0, 0x3 - strb r0, [r1] - ldr r0, _0806B950 @ =gUnknown_083769A8 - adds r4, r0, 0 - adds r4, 0x24 - ldr r5, _0806B954 @ =gPlayerParty + 1 * 0x64 - ldrb r0, [r4] - ldrb r1, [r4, 0x1] - movs r2, 0x3 - bl sub_806B9A4 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806B958 - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - b _0806B964 - .align 2, 0 -_0806B948: .4byte gBGTilemapBuffers + 0x1000 -_0806B94C: .4byte gUnknown_0202E8FA -_0806B950: .4byte gUnknown_083769A8 -_0806B954: .4byte gPlayerParty + 1 * 0x64 -_0806B958: - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - movs r2, 0x1 - movs r3, 0x3 - bl sub_806BA94 -_0806B964: - adds r0, r5, 0 - adds r0, 0x64 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806B980 - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - movs r2, 0 - movs r3, 0x3 - bl sub_806BA94 - b _0806B98C -_0806B980: - ldrb r0, [r4, 0x6] - ldrb r1, [r4, 0x7] - movs r2, 0x1 - movs r3, 0x3 - bl sub_806BA94 -_0806B98C: - ldr r0, _0806B99C @ =0x0201b000 - ldr r1, _0806B9A0 @ =0x00000261 - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806B99C: .4byte 0x0201b000 -_0806B9A0: .4byte 0x00000261 - thumb_func_end sub_806B908 - - thumb_func_start sub_806B9A4 -sub_806B9A4: @ 806B9A4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp] - lsls r1, 21 - lsrs r1, 16 - str r1, [sp, 0x4] - movs r1, 0 - lsls r0, 16 - mov r8, r0 - asrs r0, 16 - mov r10, r0 - ldr r4, _0806BA2C @ =gUnknown_083769D8 - mov r9, r4 -_0806B9CA: - movs r3, 0 - adds r7, r1, 0x1 - mov r0, r10 - cmp r0, 0x1F - bgt _0806BA12 - mov r4, r8 - asrs r2, r4, 16 - lsls r0, r1, 5 - ldr r4, [sp, 0x4] - adds r6, r4, r0 - ldr r0, _0806BA30 @ =gBGTilemapBuffers + 0x1000 - mov r12, r0 - ldr r4, [sp] - lsls r5, r4, 12 - movs r0, 0xB - adds r4, r1, 0 - muls r4, r0 -_0806B9EC: - adds r0, r2, r3 - cmp r0, 0 - blt _0806BA02 - adds r0, r6, r0 - lsls r0, 1 - add r0, r12 - adds r1, r4, r3 - add r1, r9 - ldrb r1, [r1] - orrs r1, r5 - strh r1, [r0] -_0806BA02: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xA - bhi _0806BA12 - adds r0, r2, r3 - cmp r0, 0x1F - ble _0806B9EC -_0806BA12: - lsls r0, r7, 24 - lsrs r1, r0, 24 - cmp r1, 0x6 - bls _0806B9CA - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806BA2C: .4byte gUnknown_083769D8 -_0806BA30: .4byte gBGTilemapBuffers + 0x1000 - thumb_func_end sub_806B9A4 - - thumb_func_start sub_806BA34 -sub_806BA34: @ 806BA34 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r1, 21 - lsrs r1, 16 - mov r8, r1 - movs r1, 0 - lsls r7, r0, 16 - asrs r0, r7, 16 - mov r12, r0 -_0806BA48: - movs r2, 0 - adds r4, r1, 0x1 - mov r5, r12 - cmp r5, 0x1F - bgt _0806BA7C - asrs r3, r7, 16 - lsls r0, r1, 5 - mov r5, r8 - adds r1, r5, r0 - ldr r6, _0806BA90 @ =gBGTilemapBuffers + 0x1000 - movs r5, 0 -_0806BA5E: - adds r0, r3, r2 - cmp r0, 0 - blt _0806BA6C - adds r0, r1, r0 - lsls r0, 1 - adds r0, r6 - strh r5, [r0] -_0806BA6C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xA - bhi _0806BA7C - adds r0, r3, r2 - cmp r0, 0x1F - ble _0806BA5E -_0806BA7C: - lsls r0, r4, 24 - lsrs r1, r0, 24 - cmp r1, 0x6 - bls _0806BA48 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806BA90: .4byte gBGTilemapBuffers + 0x1000 - thumb_func_end sub_806BA34 - - thumb_func_start sub_806BA94 -sub_806BA94: @ 806BA94 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r0, r1, 16 - lsls r2, 24 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp] - ldr r1, _0806BB30 @ =gUnknown_08376A5E - mov r9, r1 - cmp r2, 0 - bne _0806BABC - ldr r1, _0806BB34 @ =gUnknown_08376A25 - mov r9, r1 -_0806BABC: - lsls r0, 21 - lsrs r0, 16 - str r0, [sp, 0x4] - movs r1, 0 - lsls r4, 16 - mov r12, r4 - asrs r4, 16 - mov r10, r4 -_0806BACC: - movs r2, 0 - adds r7, r1, 0x1 - mov r0, r10 - cmp r0, 0x1F - bgt _0806BB16 - mov r4, r12 - asrs r3, r4, 16 - lsls r0, r1, 5 - ldr r4, [sp, 0x4] - adds r6, r4, r0 - ldr r0, _0806BB38 @ =gBGTilemapBuffers + 0x1000 - mov r8, r0 - ldr r4, [sp] - lsls r5, r4, 12 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - subs r4, r0, r1 -_0806BAF0: - adds r0, r3, r2 - cmp r0, 0 - blt _0806BB06 - adds r0, r6, r0 - lsls r0, 1 - add r0, r8 - adds r1, r4, r2 - add r1, r9 - ldrb r1, [r1] - orrs r1, r5 - strh r1, [r0] -_0806BB06: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x12 - bhi _0806BB16 - adds r0, r3, r2 - cmp r0, 0x1F - ble _0806BAF0 -_0806BB16: - lsls r0, r7, 24 - lsrs r1, r0, 24 - cmp r1, 0x2 - bls _0806BACC - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806BB30: .4byte gUnknown_08376A5E -_0806BB34: .4byte gUnknown_08376A25 -_0806BB38: .4byte gBGTilemapBuffers + 0x1000 - thumb_func_end sub_806BA94 - - thumb_func_start sub_806BB3C -sub_806BB3C: @ 806BB3C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r1, 21 - lsrs r1, 16 - mov r8, r1 - movs r1, 0 - lsls r7, r0, 16 - asrs r0, r7, 16 - mov r12, r0 -_0806BB50: - movs r2, 0 - adds r4, r1, 0x1 - mov r5, r12 - cmp r5, 0x1F - bgt _0806BB84 - asrs r3, r7, 16 - lsls r0, r1, 5 - mov r5, r8 - adds r1, r5, r0 - ldr r6, _0806BB98 @ =gBGTilemapBuffers + 0x1000 - movs r5, 0 -_0806BB66: - adds r0, r3, r2 - cmp r0, 0 - blt _0806BB74 - adds r0, r1, r0 - lsls r0, 1 - adds r0, r6 - strh r5, [r0] -_0806BB74: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x12 - bhi _0806BB84 - adds r0, r3, r2 - cmp r0, 0x1F - ble _0806BB66 -_0806BB84: - lsls r0, r4, 24 - lsrs r1, r0, 24 - cmp r1, 0x2 - bls _0806BB50 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806BB98: .4byte gBGTilemapBuffers + 0x1000 - thumb_func_end sub_806BB3C - - thumb_func_start sub_806BB9C -sub_806BB9C: @ 806BB9C - push {r4,lr} - sub sp, 0x18 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0806BBE4 @ =gUnknown_08376CD4 - mov r0, sp - movs r2, 0x18 - bl memcpy - ldr r3, _0806BBE8 @ =0x06003c30 - movs r2, 0 - lsls r4, 12 -_0806BBB6: - lsls r0, r2, 1 - adds r1, r0, r3 - add r0, sp - ldrh r0, [r0] - adds r0, r4 - strh r0, [r1] - adds r1, 0x40 - adds r0, r2, 0x6 - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - adds r0, r4 - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x5 - bls _0806BBB6 - add sp, 0x18 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806BBE4: .4byte gUnknown_08376CD4 -_0806BBE8: .4byte 0x06003c30 - thumb_func_end sub_806BB9C - - thumb_func_start sub_806BBEC -sub_806BBEC: @ 806BBEC - push {r4,lr} - sub sp, 0x18 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0806BC34 @ =gUnknown_08376CEC - mov r0, sp - movs r2, 0x18 - bl memcpy - ldr r3, _0806BC38 @ =0x06003cb0 - movs r2, 0 - lsls r4, 12 -_0806BC06: - lsls r0, r2, 1 - adds r1, r0, r3 - add r0, sp - ldrh r0, [r0] - adds r0, r4 - strh r0, [r1] - adds r1, 0x40 - adds r0, r2, 0x6 - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - adds r0, r4 - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x5 - bls _0806BC06 - add sp, 0x18 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806BC34: .4byte gUnknown_08376CEC -_0806BC38: .4byte 0x06003cb0 - thumb_func_end sub_806BBEC - - thumb_func_start sub_806BC3C -sub_806BC3C: @ 806BC3C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r6, _0806BCB0 @ =gUnknown_08376918 - bl IsDoubleBattle - lsls r4, 2 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r4, r1 - adds r4, r6 - ldr r7, [r4] - movs r6, 0 - adds r0, r5, 0 - movs r1, 0x7 - bl __udivsi3 - lsls r0, 24 - lsrs r4, r0, 19 - ldr r5, _0806BCB4 @ =gUnknown_08E9A300 - movs r0, 0x86 - lsls r0, 1 - adds r3, r0, 0 -_0806BC7C: - adds r1, r6, r4 - lsls r2, r6, 1 - adds r2, r7 - lsls r0, r1, 1 - adds r0, r5 - ldrh r0, [r0] - adds r0, r3, r0 - strh r0, [r2] - adds r2, 0x40 - adds r1, 0x20 - lsls r1, 1 - adds r1, r5 - ldrh r1, [r1] - adds r0, r3, r1 - strh r0, [r2] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x6 - bls _0806BC7C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806BCB0: .4byte gUnknown_08376918 -_0806BCB4: .4byte gUnknown_08E9A300 - thumb_func_end sub_806BC3C - - thumb_func_start unref_sub_806BCB8 -unref_sub_806BCB8: @ 806BCB8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _0806BCE4 @ =gPlayerPartyCount - ldrb r1, [r0] - cmp r4, r1 - bcs _0806BCDE - adds r6, r0, 0 -_0806BCCA: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_806BC3C - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r6] - cmp r4, r0 - bcc _0806BCCA -_0806BCDE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0806BCE4: .4byte gPlayerPartyCount - thumb_func_end unref_sub_806BCB8 - - thumb_func_start sub_806BCE8 -sub_806BCE8: @ 806BCE8 - push {r4,r5,lr} - movs r5, 0 - b _0806BD46 -_0806BCEE: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0806BD20 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _0806BD38 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0806BD24 - cmp r0, 0xFE - beq _0806BD2E - adds r0, r5, 0 - movs r1, 0x46 - bl sub_806BC3C - b _0806BD40 - .align 2, 0 -_0806BD20: .4byte gPlayerParty -_0806BD24: - adds r0, r5, 0 - movs r1, 0x54 - bl sub_806BC3C - b _0806BD40 -_0806BD2E: - adds r0, r5, 0 - movs r1, 0x62 - bl sub_806BC3C - b _0806BD40 -_0806BD38: - adds r0, r5, 0 - movs r1, 0x46 - bl sub_806BC3C -_0806BD40: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_0806BD46: - ldr r0, _0806BD54 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r5, r0 - bcc _0806BCEE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806BD54: .4byte gPlayerPartyCount - thumb_func_end sub_806BCE8 - - thumb_func_start sub_806BD58 -sub_806BD58: @ 806BD58 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0806BD7C @ =SpriteCallbackDummy - bl CreateInvisibleSpriteWithCallback - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_806CA18 - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0806BD7C: .4byte SpriteCallbackDummy - thumb_func_end sub_806BD58 - - thumb_func_start sub_806BD80 -sub_806BD80: @ 806BD80 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _0806BD9C @ =gMain - ldrh r0, [r0, 0x30] - cmp r0, 0x20 - beq _0806BDB2 - cmp r0, 0x20 - bgt _0806BDA0 - cmp r0, 0x10 - beq _0806BDB6 - b _0806BDB8 - .align 2, 0 -_0806BD9C: .4byte gMain -_0806BDA0: - cmp r0, 0x40 - beq _0806BDAA - cmp r0, 0x80 - beq _0806BDAE - b _0806BDB8 -_0806BDAA: - movs r4, 0xFF - b _0806BDB8 -_0806BDAE: - movs r4, 0x1 - b _0806BDB8 -_0806BDB2: - movs r4, 0xFE - b _0806BDB8 -_0806BDB6: - movs r4, 0x2 -_0806BDB8: - lsls r0, r4, 24 - cmp r0, 0 - bne _0806BDDC - bl sub_80F92BC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806BDD0 - cmp r0, 0x2 - beq _0806BDD4 - b _0806BDD6 -_0806BDD0: - movs r4, 0xFF - b _0806BDD6 -_0806BDD4: - movs r4, 0x1 -_0806BDD6: - lsls r0, r4, 24 - cmp r0, 0 - beq _0806BDF0 -_0806BDDC: - asrs r1, r0, 24 - adds r0, r5, 0 - bl sub_806BF74 - ldr r0, _0806BDEC @ =gMain - ldrh r0, [r0, 0x30] - b _0806BE2C - .align 2, 0 -_0806BDEC: .4byte gMain -_0806BDF0: - ldr r0, _0806BE1C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806BE24 - ldr r4, _0806BE20 @ =gSprites - adds r0, r5, 0 - bl sub_806CA00 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x7 - bne _0806BE24 - movs r0, 0x2 - b _0806BE2C - .align 2, 0 -_0806BE1C: .4byte gMain -_0806BE20: .4byte gSprites -_0806BE24: - ldr r0, _0806BE34 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 -_0806BE2C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0806BE34: .4byte gMain - thumb_func_end sub_806BD80 - - thumb_func_start sub_806BE38 -sub_806BE38: @ 806BE38 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _0806BE54 @ =gMain - ldrh r1, [r0, 0x30] - adds r6, r0, 0 - cmp r1, 0x20 - beq _0806BE6A - cmp r1, 0x20 - bgt _0806BE58 - cmp r1, 0x10 - beq _0806BE6E - b _0806BE70 - .align 2, 0 -_0806BE54: .4byte gMain -_0806BE58: - cmp r1, 0x40 - beq _0806BE62 - cmp r1, 0x80 - beq _0806BE66 - b _0806BE70 -_0806BE62: - movs r4, 0xFF - b _0806BE8E -_0806BE66: - movs r4, 0x1 - b _0806BE8E -_0806BE6A: - movs r4, 0xFE - b _0806BE8E -_0806BE6E: - movs r4, 0x2 -_0806BE70: - cmp r4, 0 - bne _0806BE8E - bl sub_80F92BC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806BE86 - cmp r0, 0x2 - beq _0806BE8A - b _0806BE8C -_0806BE86: - movs r4, 0xFF - b _0806BE8C -_0806BE8A: - movs r4, 0x1 -_0806BE8C: - ldr r6, _0806BEA4 @ =gMain -_0806BE8E: - ldrh r2, [r6, 0x2E] - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _0806BEA8 - adds r0, r5, 0 - bl sub_806C890 - movs r0, 0x8 - b _0806BEF0 - .align 2, 0 -_0806BEA4: .4byte gMain -_0806BEA8: - lsls r0, r4, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0806BEBA - adds r0, r5, 0 - bl sub_806C658 - ldrh r0, [r6, 0x30] - b _0806BEF0 -_0806BEBA: - movs r0, 0x1 - ands r0, r2 - cmp r0, 0 - beq _0806BEE8 - ldr r4, _0806BEE4 @ =gSprites - adds r0, r5, 0 - bl sub_806CA00 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x7 - bne _0806BEE8 - movs r0, 0x2 - b _0806BEF0 - .align 2, 0 -_0806BEE4: .4byte gSprites -_0806BEE8: - ldr r0, _0806BEF8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 -_0806BEF0: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0806BEF8: .4byte gMain - thumb_func_end sub_806BE38 - - thumb_func_start task_pc_turn_off -task_pc_turn_off: @ 806BEFC - push {lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r3, r1, 24 - ldrb r0, [r2] - cmp r0, 0 - beq _0806BF14 - ldrb r1, [r2, 0x1] - movs r2, 0 - bl sub_806BA94 - b _0806BF1E -_0806BF14: - ldrb r0, [r2] - ldrb r1, [r2, 0x1] - adds r2, r3, 0 - bl sub_806B9A4 -_0806BF1E: - pop {r0} - bx r0 - thumb_func_end task_pc_turn_off - - thumb_func_start sub_806BF24 -sub_806BF24: @ 806BF24 - push {r4-r7,lr} - adds r7, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r4, r2, 24 - lsls r3, 24 - lsrs r6, r3, 24 - movs r0, 0x64 - muls r1, r0 - ldr r0, _0806BF70 @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806BF56 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - bne _0806BF56 - movs r4, 0x5 -_0806BF56: - cmp r6, 0x1 - bne _0806BF60 - adds r0, r4, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 -_0806BF60: - adds r0, r7, 0 - adds r1, r4, 0 - bl task_pc_turn_off - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806BF70: .4byte gPlayerParty - thumb_func_end sub_806BF24 - - thumb_func_start sub_806BF74 -sub_806BF74: @ 806BF74 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 24 - lsrs r4, r1, 24 - bl sub_806CA00 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0806C0C4 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r9 - adds r1, r5, 0 - movs r2, 0 - bl UpdateMonIconFrame_806DA44 - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806BFB6 - b _0806C0D8 -_0806BFB6: - cmp r5, 0 - beq _0806BFC2 - cmp r5, 0x2 - beq _0806BFC2 - cmp r5, 0x3 - bne _0806BFD2 -_0806BFC2: - lsls r0, r5, 1 - ldr r1, _0806C0C8 @ =gUnknown_083769C0 - adds r0, r1 - adds r1, r5, 0 - movs r2, 0x3 - movs r3, 0 - bl sub_806BF24 -_0806BFD2: - cmp r5, 0x1 - beq _0806BFDE - cmp r5, 0x4 - beq _0806BFDE - cmp r5, 0x5 - bne _0806BFEE -_0806BFDE: - lsls r0, r5, 1 - ldr r1, _0806C0C8 @ =gUnknown_083769C0 - adds r0, r1 - adds r1, r5, 0 - movs r2, 0x4 - movs r3, 0 - bl sub_806BF24 -_0806BFEE: - cmp r5, 0x7 - bne _0806BFF8 - movs r0, 0x1 - bl sub_806BBEC -_0806BFF8: - lsls r2, r4, 24 - asrs r2, 24 - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_806C490 - ldr r2, _0806C0C4 @ =gSprites - lsls r1, r6, 4 - adds r0, r1, r6 - lsls r0, 2 - adds r0, r2 - movs r2, 0x2E - ldrsh r0, [r0, r2] - mov r8, r1 - cmp r0, 0 - beq _0806C020 - cmp r0, 0x2 - beq _0806C020 - cmp r0, 0x3 - bne _0806C042 -_0806C020: - ldr r0, _0806C0C4 @ =gSprites - mov r4, r8 - adds r1, r4, r6 - lsls r1, 2 - adds r1, r0 - movs r7, 0x2E - ldrsh r0, [r1, r7] - lsls r0, 1 - ldr r2, _0806C0C8 @ =gUnknown_083769C0 - adds r0, r2 - ldrh r1, [r1, 0x2E] - lsls r1, 24 - lsrs r1, 24 - movs r2, 0x3 - movs r3, 0x1 - bl sub_806BF24 -_0806C042: - ldr r1, _0806C0C4 @ =gSprites - mov r2, r8 - adds r0, r2, r6 - lsls r0, 2 - adds r0, r1 - movs r4, 0x2E - ldrsh r0, [r0, r4] - cmp r0, 0x1 - beq _0806C05C - cmp r0, 0x4 - beq _0806C05C - cmp r0, 0x5 - bne _0806C07E -_0806C05C: - ldr r0, _0806C0C4 @ =gSprites - mov r7, r8 - adds r1, r7, r6 - lsls r1, 2 - adds r1, r0 - movs r2, 0x2E - ldrsh r0, [r1, r2] - lsls r0, 1 - ldr r2, _0806C0C8 @ =gUnknown_083769C0 - adds r0, r2 - ldrh r1, [r1, 0x2E] - lsls r1, 24 - lsrs r1, 24 - movs r2, 0x4 - movs r3, 0x1 - bl sub_806BF24 -_0806C07E: - ldr r7, _0806C0C4 @ =gSprites - mov r4, r8 - adds r0, r4, r6 - lsls r0, 2 - adds r4, r0, r7 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bne _0806C096 - movs r0, 0x2 - bl sub_806BBEC -_0806C096: - ldr r0, _0806C0CC @ =0x0201b000 - ldr r2, _0806C0D0 @ =0x00000261 - adds r0, r2 - movs r1, 0x2 - strb r1, [r0] - ldr r1, _0806C0D4 @ =gUnknown_083768B8 - movs r2, 0x2E - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - adds r0, 0x40 - ldrb r0, [r0] - strh r0, [r4, 0x20] - movs r2, 0x2E - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - adds r0, 0x41 - ldrb r0, [r0] - strh r0, [r4, 0x22] - adds r0, r7, 0 - b _0806C1A4 - .align 2, 0 -_0806C0C4: .4byte gSprites -_0806C0C8: .4byte gUnknown_083769C0 -_0806C0CC: .4byte 0x0201b000 -_0806C0D0: .4byte 0x00000261 -_0806C0D4: .4byte gUnknown_083768B8 -_0806C0D8: - bl IsDoubleBattle - lsls r0, 24 - lsrs r7, r0, 24 - cmp r5, 0x5 - bhi _0806C104 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - lsls r1, r5, 1 - adds r0, r1 - ldr r1, _0806C100 @ =gUnknown_083769A8 - adds r0, r1 - adds r1, r5, 0 - movs r2, 0x3 - movs r3, 0 - bl sub_806BF24 - b _0806C10A - .align 2, 0 -_0806C100: .4byte gUnknown_083769A8 -_0806C104: - movs r0, 0x1 - bl sub_806BBEC -_0806C10A: - cmp r7, 0 - bne _0806C11C - lsls r2, r4, 24 - asrs r2, 24 - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_806C1E4 - b _0806C128 -_0806C11C: - lsls r2, r4, 24 - asrs r2, 24 - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_806C310 -_0806C128: - ldr r1, _0806C160 @ =gSprites - lsls r2, r6, 4 - adds r0, r2, r6 - lsls r0, 2 - adds r1, r0, r1 - ldrh r3, [r1, 0x2E] - movs r4, 0x2E - ldrsh r0, [r1, r4] - mov r8, r2 - cmp r0, 0x5 - bgt _0806C168 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - movs r2, 0x2E - ldrsh r1, [r1, r2] - lsls r1, 1 - adds r0, r1 - ldr r1, _0806C164 @ =gUnknown_083769A8 - adds r0, r1 - lsls r1, r3, 24 - lsrs r1, 24 - movs r2, 0x3 - movs r3, 0x1 - bl sub_806BF24 - b _0806C16E - .align 2, 0 -_0806C160: .4byte gSprites -_0806C164: .4byte gUnknown_083769A8 -_0806C168: - movs r0, 0x2 - bl sub_806BBEC -_0806C16E: - ldr r0, _0806C1D4 @ =0x0201b000 - ldr r4, _0806C1D8 @ =0x00000261 - adds r0, r4 - movs r1, 0x2 - strb r1, [r0] - ldr r4, _0806C1DC @ =gSprites - mov r0, r8 - adds r1, r0, r6 - lsls r1, 2 - adds r1, r4 - ldr r3, _0806C1E0 @ =gUnknown_083768B8 - movs r2, 0x2E - ldrsh r0, [r1, r2] - lsls r0, 2 - lsls r2, r7, 5 - adds r0, r2 - adds r0, r3 - ldrb r0, [r0] - strh r0, [r1, 0x20] - movs r7, 0x2E - ldrsh r0, [r1, r7] - lsls r0, 2 - adds r0, r2 - adds r0, r3 - ldrb r0, [r0, 0x1] - strh r0, [r1, 0x22] - adds r0, r4, 0 -_0806C1A4: - mov r1, r8 - adds r4, r1, r6 - lsls r4, 2 - adds r4, r0 - ldrh r1, [r4, 0x2E] - lsls r1, 24 - lsrs r1, 24 - mov r0, r9 - movs r2, 0x1 - bl UpdateMonIconFrame_806DA44 - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r5, r0 - beq _0806C1C8 - movs r0, 0x5 - bl PlaySE -_0806C1C8: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806C1D4: .4byte 0x0201b000 -_0806C1D8: .4byte 0x00000261 -_0806C1DC: .4byte gSprites -_0806C1E0: .4byte gUnknown_083768B8 - thumb_func_end sub_806BF74 - - thumb_func_start sub_806C1E4 -sub_806C1E4: @ 806C1E4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r2, 24 - lsrs r5, r2, 24 - movs r0, 0x80 - lsls r0, 18 - adds r2, r0 - asrs r0, r2, 24 - cmp r0, 0x4 - bls _0806C200 - b _0806C306 -_0806C200: - lsls r0, 2 - ldr r1, _0806C20C @ =_0806C210 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806C20C: .4byte _0806C210 - .align 2, 0 -_0806C210: - .4byte _0806C2EC - .4byte _0806C238 - .4byte _0806C224 - .4byte _0806C25C - .4byte _0806C2BC -_0806C224: - ldr r0, _0806C234 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x30] - b _0806C306 - .align 2, 0 -_0806C234: .4byte gSprites -_0806C238: - cmp r3, 0 - beq _0806C266 - cmp r3, 0x7 - bne _0806C298 - ldr r2, _0806C254 @ =gSprites - lsls r3, r4, 4 - adds r1, r3, r4 - lsls r1, 2 - adds r1, r2 - ldr r0, _0806C258 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - b _0806C2AA - .align 2, 0 -_0806C254: .4byte gSprites -_0806C258: .4byte gPlayerPartyCount -_0806C25C: - ldr r0, _0806C278 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - cmp r3, r0 - bne _0806C280 -_0806C266: - ldr r2, _0806C27C @ =gSprites - lsls r3, r4, 4 - adds r0, r3, r4 - lsls r0, 2 - adds r0, r2 - movs r1, 0x7 - strh r1, [r0, 0x2E] - b _0806C2AC - .align 2, 0 -_0806C278: .4byte gPlayerPartyCount -_0806C27C: .4byte gSprites -_0806C280: - cmp r3, 0x7 - bne _0806C298 - ldr r2, _0806C294 @ =gSprites - lsls r3, r4, 4 - adds r0, r3, r4 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x2E] - b _0806C2AC - .align 2, 0 -_0806C294: .4byte gSprites -_0806C298: - ldr r2, _0806C2B8 @ =gSprites - lsls r3, r4, 4 - adds r1, r3, r4 - lsls r1, 2 - adds r1, r2 - lsls r0, r5, 24 - asrs r0, 24 - ldrh r5, [r1, 0x2E] - adds r0, r5 -_0806C2AA: - strh r0, [r1, 0x2E] -_0806C2AC: - adds r0, r3, r4 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x30] - b _0806C306 - .align 2, 0 -_0806C2B8: .4byte gSprites -_0806C2BC: - ldr r0, _0806C2E4 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x1 - bls _0806C306 - cmp r3, 0 - bne _0806C306 - ldr r0, _0806C2E8 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r2, 0x30 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0806C2DE - movs r0, 0x1 - strh r0, [r1, 0x30] -_0806C2DE: - ldrh r0, [r1, 0x30] - strh r0, [r1, 0x2E] - b _0806C306 - .align 2, 0 -_0806C2E4: .4byte gPlayerPartyCount -_0806C2E8: .4byte gSprites -_0806C2EC: - subs r0, r3, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bhi _0806C306 - ldr r0, _0806C30C @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x2E] - strh r3, [r1, 0x30] -_0806C306: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806C30C: .4byte gSprites - thumb_func_end sub_806C1E4 - - thumb_func_start sub_806C310 -sub_806C310: @ 806C310 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r2, 24 - lsrs r5, r2, 24 - movs r0, 0x80 - lsls r0, 18 - adds r2, r0 - asrs r0, r2, 24 - cmp r0, 0x4 - bls _0806C32C - b _0806C486 -_0806C32C: - lsls r0, 2 - ldr r1, _0806C338 @ =_0806C33C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806C338: .4byte _0806C33C - .align 2, 0 -_0806C33C: - .4byte _0806C44E - .4byte _0806C38C - .4byte _0806C350 - .4byte _0806C364 - .4byte _0806C3E8 -_0806C350: - ldr r0, _0806C360 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x30] - b _0806C486 - .align 2, 0 -_0806C360: .4byte gSprites -_0806C364: - cmp r3, 0x7 - bne _0806C37C - ldr r2, _0806C378 @ =gSprites - lsls r3, r4, 4 - adds r0, r3, r4 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x2E] - b _0806C3D8 - .align 2, 0 -_0806C378: .4byte gSprites -_0806C37C: - ldr r0, _0806C388 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - cmp r3, r0 - beq _0806C390 - b _0806C3C4 - .align 2, 0 -_0806C388: .4byte gPlayerPartyCount -_0806C38C: - cmp r3, 0 - bne _0806C3A4 -_0806C390: - ldr r2, _0806C3A0 @ =gSprites - lsls r3, r4, 4 - adds r0, r3, r4 - lsls r0, 2 - adds r0, r2 - movs r1, 0x7 - strh r1, [r0, 0x2E] - b _0806C3D8 - .align 2, 0 -_0806C3A0: .4byte gSprites -_0806C3A4: - cmp r3, 0x7 - bne _0806C3C4 - ldr r2, _0806C3BC @ =gSprites - lsls r3, r4, 4 - adds r1, r3, r4 - lsls r1, 2 - adds r1, r2 - ldr r0, _0806C3C0 @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - b _0806C3D6 - .align 2, 0 -_0806C3BC: .4byte gSprites -_0806C3C0: .4byte gPlayerPartyCount -_0806C3C4: - ldr r2, _0806C3E4 @ =gSprites - lsls r3, r4, 4 - adds r1, r3, r4 - lsls r1, 2 - adds r1, r2 - lsls r0, r5, 24 - asrs r0, 24 - ldrh r5, [r1, 0x2E] - adds r0, r5 -_0806C3D6: - strh r0, [r1, 0x2E] -_0806C3D8: - adds r0, r3, r4 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x30] - b _0806C486 - .align 2, 0 -_0806C3E4: .4byte gSprites -_0806C3E8: - cmp r3, 0 - bne _0806C418 - ldr r0, _0806C410 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x2 - bls _0806C486 - ldr r0, _0806C414 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrh r2, [r1, 0x30] - subs r0, r2, 0x2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _0806C43A - movs r0, 0x2 - strh r0, [r1, 0x2E] - b _0806C486 - .align 2, 0 -_0806C410: .4byte gPlayerPartyCount -_0806C414: .4byte gSprites -_0806C418: - cmp r3, 0x1 - bne _0806C486 - ldr r0, _0806C440 @ =gPlayerPartyCount - ldrb r0, [r0] - cmp r0, 0x4 - bls _0806C486 - ldr r0, _0806C444 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrh r2, [r1, 0x30] - subs r0, r2, 0x4 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0806C448 -_0806C43A: - strh r2, [r1, 0x2E] - b _0806C486 - .align 2, 0 -_0806C440: .4byte gPlayerPartyCount -_0806C444: .4byte gSprites -_0806C448: - movs r0, 0x4 - strh r0, [r1, 0x2E] - b _0806C486 -_0806C44E: - subs r0, r3, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0806C46C - ldr r0, _0806C468 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - b _0806C482 - .align 2, 0 -_0806C468: .4byte gSprites -_0806C46C: - subs r0, r3, 0x4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0806C486 - ldr r0, _0806C48C @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r0, 0x1 -_0806C482: - strh r0, [r1, 0x2E] - strh r3, [r1, 0x30] -_0806C486: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806C48C: .4byte gSprites - thumb_func_end sub_806C310 - - thumb_func_start sub_806C490 -sub_806C490: @ 806C490 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r2, 24 - movs r0, 0x80 - lsls r0, 18 - adds r2, r0 - asrs r0, r2, 24 - cmp r0, 0x4 - bls _0806C4AA - b _0806C64E -_0806C4AA: - lsls r0, 2 - ldr r1, _0806C4B4 @ =_0806C4B8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806C4B4: .4byte _0806C4B8 - .align 2, 0 -_0806C4B8: - .4byte _0806C618 - .4byte _0806C524 - .4byte _0806C4CC - .4byte _0806C4E0 - .4byte _0806C57C -_0806C4CC: - ldr r0, _0806C4DC @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x30] - b _0806C64E - .align 2, 0 -_0806C4DC: .4byte gSprites -_0806C4E0: - cmp r4, 0x7 - bne _0806C4FC - ldr r2, _0806C4F8 @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x2E] - adds r1, r2, 0 - adds r6, r3, 0 - b _0806C566 - .align 2, 0 -_0806C4F8: .4byte gSprites -_0806C4FC: - lsls r6, r5, 4 - b _0806C518 -_0806C500: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x64 - muls r0, r4 - ldr r1, _0806C520 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - bne _0806C528 -_0806C518: - cmp r4, 0x5 - bne _0806C500 - b _0806C558 - .align 2, 0 -_0806C520: .4byte gPlayerParty -_0806C524: - lsls r6, r5, 4 - b _0806C554 -_0806C528: - ldr r1, _0806C534 @ =gSprites - adds r0, r6, r5 - lsls r0, 2 - adds r0, r1 - strh r4, [r0, 0x2E] - b _0806C566 - .align 2, 0 -_0806C534: .4byte gSprites -_0806C538: - subs r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - beq _0806C554 - movs r0, 0x64 - muls r0, r4 - ldr r1, _0806C574 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - bne _0806C528 -_0806C554: - cmp r4, 0 - bne _0806C538 -_0806C558: - ldr r0, _0806C578 @ =gSprites - adds r1, r6, r5 - lsls r1, 2 - adds r1, r0 - movs r2, 0x7 - strh r2, [r1, 0x2E] - adds r1, r0, 0 -_0806C566: - adds r0, r6, r5 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x30] - b _0806C64E - .align 2, 0 -_0806C574: .4byte gPlayerParty -_0806C578: .4byte gSprites -_0806C57C: - cmp r4, 0 - bne _0806C5C8 - ldr r0, _0806C5AC @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r4, r1, r0 - ldrh r1, [r4, 0x30] - subs r0, r1, 0x2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _0806C5E2 - ldr r5, _0806C5B0 @ =gPlayerParty + 2 * 0x64 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806C5B4 - movs r0, 0x2 - strh r0, [r4, 0x2E] - b _0806C64E - .align 2, 0 -_0806C5AC: .4byte gSprites -_0806C5B0: .4byte gPlayerParty + 2 * 0x64 -_0806C5B4: - adds r0, r5, 0 - adds r0, 0x64 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806C64E - movs r0, 0x3 - strh r0, [r4, 0x2E] - b _0806C64E -_0806C5C8: - cmp r4, 0x1 - bne _0806C64E - ldr r0, _0806C5E8 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r4, r1, r0 - ldrh r1, [r4, 0x30] - subs r0, r1, 0x4 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _0806C5EC -_0806C5E2: - strh r1, [r4, 0x2E] - b _0806C64E - .align 2, 0 -_0806C5E8: .4byte gSprites -_0806C5EC: - ldr r5, _0806C600 @ =gPlayerParty + 4 * 0x64 - adds r0, r5, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806C604 - movs r0, 0x4 - strh r0, [r4, 0x2E] - b _0806C64E - .align 2, 0 -_0806C600: .4byte gPlayerParty + 4 * 0x64 -_0806C604: - adds r0, r5, 0 - adds r0, 0x64 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _0806C64E - movs r0, 0x5 - strh r0, [r4, 0x2E] - b _0806C64E -_0806C618: - subs r0, r4, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0806C634 - ldr r0, _0806C630 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - b _0806C64A - .align 2, 0 -_0806C630: .4byte gSprites -_0806C634: - subs r0, r4, 0x4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _0806C64E - ldr r0, _0806C654 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - movs r0, 0x1 -_0806C64A: - strh r0, [r1, 0x2E] - strh r4, [r1, 0x30] -_0806C64E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0806C654: .4byte gSprites - thumb_func_end sub_806C490 - - thumb_func_start sub_806C658 -sub_806C658: @ 806C658 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r4, r1, 24 - bl sub_806CA00 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0806C6A0 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - lsrs r6, r0, 24 - mov r0, r8 - adds r1, r6, 0 - movs r2, 0 - bl UpdateMonIconFrame_806DA44 - cmp r6, 0x5 - bhi _0806C6A8 - lsls r0, r6, 1 - ldr r1, _0806C6A4 @ =gUnknown_083769A8 - adds r0, r1 - adds r1, r6, 0 - movs r2, 0x3 - movs r3, 0 - bl sub_806BF24 - b _0806C6BA - .align 2, 0 -_0806C6A0: .4byte gSprites -_0806C6A4: .4byte gUnknown_083769A8 -_0806C6A8: - cmp r6, 0x6 - bne _0806C6B4 - movs r0, 0x1 - bl sub_806BB9C - b _0806C6BA -_0806C6B4: - movs r0, 0x1 - bl sub_806BBEC -_0806C6BA: - lsls r1, r4, 24 - movs r2, 0x80 - lsls r2, 18 - adds r0, r1, r2 - asrs r0, 24 - lsls r4, r5, 4 - adds r7, r1, 0 - cmp r0, 0x4 - bls _0806C6CE - b _0806C7EA -_0806C6CE: - lsls r0, 2 - ldr r1, _0806C6D8 @ =_0806C6DC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806C6D8: .4byte _0806C6DC - .align 2, 0 -_0806C6DC: - .4byte _0806C7D0 - .4byte _0806C708 - .4byte _0806C6F0 - .4byte _0806C740 - .4byte _0806C7A0 -_0806C6F0: - ldr r1, _0806C704 @ =gSprites - lsls r2, r5, 4 - adds r0, r2, r5 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x30] - adds r4, r2, 0 - b _0806C7EA - .align 2, 0 -_0806C704: .4byte gSprites -_0806C708: - cmp r6, 0 - bne _0806C720 - ldr r2, _0806C71C @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0x7 - strh r1, [r0, 0x2E] - b _0806C78E - .align 2, 0 -_0806C71C: .4byte gSprites -_0806C720: - cmp r6, 0x6 - bne _0806C77C - ldr r2, _0806C738 @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - ldr r0, _0806C73C @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - b _0806C78C - .align 2, 0 -_0806C738: .4byte gSprites -_0806C73C: .4byte gPlayerPartyCount -_0806C740: - ldr r0, _0806C75C @ =gPlayerPartyCount - ldrb r0, [r0] - subs r0, 0x1 - cmp r6, r0 - bne _0806C764 - ldr r2, _0806C760 @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0x6 - strh r1, [r0, 0x2E] - b _0806C78E - .align 2, 0 -_0806C75C: .4byte gPlayerPartyCount -_0806C760: .4byte gSprites -_0806C764: - cmp r6, 0x7 - bne _0806C77C - ldr r2, _0806C778 @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x2E] - b _0806C78E - .align 2, 0 -_0806C778: .4byte gSprites -_0806C77C: - ldr r2, _0806C79C @ =gSprites - lsls r3, r5, 4 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r2 - asrs r0, r7, 24 - ldrh r4, [r1, 0x2E] - adds r0, r4 -_0806C78C: - strh r0, [r1, 0x2E] -_0806C78E: - adds r4, r3, 0 - adds r0, r4, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x30] - b _0806C7EA - .align 2, 0 -_0806C79C: .4byte gSprites -_0806C7A0: - ldr r0, _0806C7C8 @ =gPlayerPartyCount - ldrb r0, [r0] - lsls r4, r5, 4 - cmp r0, 0x1 - bls _0806C7EA - cmp r6, 0 - bne _0806C7EA - ldr r0, _0806C7CC @ =gSprites - adds r1, r4, r5 - lsls r1, 2 - adds r1, r0 - movs r2, 0x30 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _0806C7C2 - movs r0, 0x1 - strh r0, [r1, 0x30] -_0806C7C2: - ldrh r0, [r1, 0x30] - strh r0, [r1, 0x2E] - b _0806C7EA - .align 2, 0 -_0806C7C8: .4byte gPlayerPartyCount -_0806C7CC: .4byte gSprites -_0806C7D0: - subs r0, r6, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r5, 4 - cmp r0, 0x4 - bhi _0806C7EA - ldr r0, _0806C82C @ =gSprites - adds r1, r4, r5 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x2E] - strh r6, [r1, 0x30] -_0806C7EA: - ldr r1, _0806C82C @ =gSprites - adds r0, r4, r5 - lsls r0, 2 - adds r2, r0, r1 - ldr r1, _0806C830 @ =gUnknown_083768B8 - movs r3, 0x2E - ldrsh r0, [r2, r3] - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - strh r0, [r2, 0x20] - movs r3, 0x2E - ldrsh r0, [r2, r3] - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x1] - strh r0, [r2, 0x22] - ldrh r3, [r2, 0x2E] - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0x5 - bgt _0806C838 - lsls r0, 1 - ldr r1, _0806C834 @ =gUnknown_083769A8 - adds r0, r1 - lsls r1, r3, 24 - lsrs r1, 24 - movs r2, 0x3 - movs r3, 0x1 - bl sub_806BF24 - b _0806C84A - .align 2, 0 -_0806C82C: .4byte gSprites -_0806C830: .4byte gUnknown_083768B8 -_0806C834: .4byte gUnknown_083769A8 -_0806C838: - cmp r0, 0x6 - bne _0806C844 - movs r0, 0x2 - bl sub_806BB9C - b _0806C84A -_0806C844: - movs r0, 0x2 - bl sub_806BBEC -_0806C84A: - ldr r0, _0806C884 @ =0x0201b000 - ldr r2, _0806C888 @ =0x00000261 - adds r0, r2 - movs r1, 0x2 - strb r1, [r0] - ldr r0, _0806C88C @ =gSprites - adds r4, r5 - lsls r4, 2 - adds r4, r0 - ldrh r1, [r4, 0x2E] - lsls r1, 24 - lsrs r1, 24 - mov r0, r8 - movs r2, 0x1 - bl UpdateMonIconFrame_806DA44 - movs r3, 0x2E - ldrsh r0, [r4, r3] - cmp r6, r0 - beq _0806C878 - movs r0, 0x5 - bl PlaySE -_0806C878: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806C884: .4byte 0x0201b000 -_0806C888: .4byte 0x00000261 -_0806C88C: .4byte gSprites - thumb_func_end sub_806C658 - - thumb_func_start sub_806C890 -sub_806C890: @ 806C890 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - bl sub_806CA00 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0806C8D4 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - beq _0806C914 - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0 - bl UpdateMonIconFrame_806DA44 - cmp r4, 0x5 - bhi _0806C8DC - lsls r0, r4, 1 - ldr r1, _0806C8D8 @ =gUnknown_083769A8 - adds r0, r1 - adds r1, r4, 0 - movs r2, 0x3 - movs r3, 0 - bl sub_806BF24 - b _0806C8E2 - .align 2, 0 -_0806C8D4: .4byte gSprites -_0806C8D8: .4byte gUnknown_083769A8 -_0806C8DC: - movs r0, 0x1 - bl sub_806BBEC -_0806C8E2: - ldr r1, _0806C91C @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x30] - movs r1, 0x6 - strh r1, [r0, 0x2E] - ldr r2, _0806C920 @ =gUnknown_083768B8 - ldrb r1, [r2, 0x18] - strh r1, [r0, 0x20] - ldrb r1, [r2, 0x19] - strh r1, [r0, 0x22] - movs r0, 0x2 - bl sub_806BB9C - ldr r0, _0806C924 @ =0x0201b000 - ldr r1, _0806C928 @ =0x00000261 - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - movs r0, 0x5 - bl PlaySE -_0806C914: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0806C91C: .4byte gSprites -_0806C920: .4byte gUnknown_083768B8 -_0806C924: .4byte 0x0201b000 -_0806C928: .4byte 0x00000261 - thumb_func_end sub_806C890 - - thumb_func_start sub_806C92C -sub_806C92C: @ 806C92C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0806C960 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x2E] - lsls r0, 24 - lsrs r6, r0, 24 - ldrh r0, [r1, 0x30] - lsls r0, 24 - lsrs r4, r0, 24 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _0806C96A - cmp r6, 0 - bne _0806C964 - cmp r4, 0 - bne _0806C97C - movs r4, 0x1 - b _0806C97C - .align 2, 0 -_0806C960: .4byte gSprites -_0806C964: - cmp r4, 0 - beq _0806C97C - b _0806C97A -_0806C96A: - cmp r6, 0x1 - bhi _0806C976 - cmp r4, 0x1 - bhi _0806C97C - movs r4, 0x2 - b _0806C97C -_0806C976: - cmp r4, 0x1 - bls _0806C97C -_0806C97A: - movs r4, 0 -_0806C97C: - ldr r1, _0806C990 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - strh r4, [r0, 0x30] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0806C990: .4byte gSprites - thumb_func_end sub_806C92C - - thumb_func_start sub_806C994 -sub_806C994: @ 806C994 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - bl sub_806CA00 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0806C9C0 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - strh r4, [r1, 0x2E] - bl sub_806C92C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806C9C0: .4byte gSprites - thumb_func_end sub_806C994 - - thumb_func_start sub_806C9C4 -sub_806C9C4: @ 806C9C4 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - bl sub_806CA00 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _0806C9FC @ =gSprites - lsls r2, r4, 4 - adds r2, r4 - lsls r2, 2 - adds r2, r3 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrh r0, [r1, 0x20] - strh r0, [r2, 0x20] - ldrh r0, [r1, 0x22] - strh r0, [r2, 0x22] - ldrh r0, [r1, 0x2E] - strh r0, [r2, 0x2E] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806C9FC: .4byte gSprites - thumb_func_end sub_806C9C4 - - thumb_func_start sub_806CA00 -sub_806CA00: @ 806CA00 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0806CA14 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrh r0, [r1, 0xE] - lsrs r0, 8 - bx lr - .align 2, 0 -_0806CA14: .4byte gTasks - thumb_func_end sub_806CA00 - - thumb_func_start sub_806CA18 -sub_806CA18: @ 806CA18 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - ldr r3, _0806CA34 @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r3 - ldrb r0, [r2, 0xE] - lsrs r1, 16 - orrs r0, r1 - strh r0, [r2, 0xE] - bx lr - .align 2, 0 -_0806CA34: .4byte gTasks - thumb_func_end sub_806CA18 - - thumb_func_start sub_806CA38 -sub_806CA38: @ 806CA38 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_806CA00 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0806CA5C @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x2E] - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0806CA5C: .4byte gSprites - thumb_func_end sub_806CA38 - - thumb_func_start sub_806CA60 -sub_806CA60: @ 806CA60 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0806CAD8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0806CADC @ =TaskDummy - str r1, [r0] - ldr r5, _0806CAE0 @ =0x02001000 - strb r4, [r5] - ldr r0, _0806CAE4 @ =sub_806CB74 - movs r1, 0 - bl CreateTask - ldr r0, _0806CAE8 @ =SpriteCallbackDummy - bl CreateInvisibleSpriteWithCallback - strb r0, [r5, 0x1] - ldrb r1, [r5, 0x1] - adds r0, r4, 0 - bl sub_806C9C4 - adds r0, r4, 0 - bl sub_806CA00 - strb r0, [r5, 0x2] - ldr r1, _0806CAEC @ =0x0001a272 - adds r0, r5, r1 - ldrb r0, [r0] - movs r1, 0 - bl sub_806D538 - ldr r2, _0806CAF0 @ =gSprites - ldrb r0, [r5, 0x1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r2, 0x2E - ldrsh r0, [r1, r2] - lsls r0, 1 - ldr r2, _0806CAF4 @ =gUnknown_083769A8 - adds r0, r2 - ldrh r1, [r1, 0x2E] - lsls r1, 24 - lsrs r1, 24 - movs r2, 0x6 - movs r3, 0 - bl sub_806BF24 - ldr r0, _0806CAF8 @ =0x0001a261 - adds r5, r0 - movs r0, 0x2 - strb r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806CAD8: .4byte gTasks -_0806CADC: .4byte TaskDummy -_0806CAE0: .4byte 0x02001000 -_0806CAE4: .4byte sub_806CB74 -_0806CAE8: .4byte SpriteCallbackDummy -_0806CAEC: .4byte 0x0001a272 -_0806CAF0: .4byte gSprites -_0806CAF4: .4byte gUnknown_083769A8 -_0806CAF8: .4byte 0x0001a261 - thumb_func_end sub_806CA60 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle.h b/include/battle.h index 47cb7cf8e..86e15ad49 100644 --- a/include/battle.h +++ b/include/battle.h @@ -19,6 +19,8 @@ #define BATTLE_TYPE_LEGENDARY 0x2000 #define BATTLE_TYPE_REGI 0x4000 +#define BATTLE_TYPE_LINK_DOUBLE (BATTLE_TYPE_MULTI | BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE) + #define BATTLE_WON 0x1 #define BATTLE_LOST 0x2 #define BATTLE_DREW 0x3 diff --git a/include/party_menu.h b/include/party_menu.h index 510c12616..74ef72519 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -15,11 +15,11 @@ struct PartyPopupMenu struct Unk201B000 { - //u8 filler0[0x260]; struct Pokemon unk0[6]; - u8 filler258[1]; + u8 unk258; u8 unk259; - u8 filler25A[6]; + u8 filler25A[2]; + TaskFunc taskFunc; u8 unk260; u8 unk261; u8 unk262; @@ -71,20 +71,23 @@ extern u8 ewram[]; #define EWRAM_1B000 ewram1B000_alt void sub_806AEDC(void); -void sub_806AF4C(u8 arg0, u8 arg1, void* arg2, u8 arg3); -void OpenPartyMenu(u8, u8); -void OpenPartyMenu(); +void sub_806AF4C(u8 a, u8 battleFlags, TaskFunc func, u8 d); +void OpenPartyMenu(u8 a, u8 b); bool8 sub_806B124(void); -u8 IsLinkDoubleBattle(void); +bool8 IsLinkDoubleBattle(void); u8 sub_806B58C(u8); u8 sub_806B58C(u8); +void sub_806B908(void); void sub_806BC3C(u8, u8); +void sub_806BCE8(void); u8 sub_806BD58(u8, u8); u8 sub_806BD58(u8, u8); -u16 sub_806BD80(u8); -void task_pc_turn_off(); -void sub_806BF74(u8 arg0, s8 arg1); -void sub_806C994(u8 arg0, u8 arg1); +u16 sub_806BD80(u8 taskId); +u16 sub_806BE38(u8 taskId); +void task_pc_turn_off(const u8 *a, u8 b); +void sub_806BF74(u8 taskId, s8 directionPressed); +void sub_806C890(u8 taskId); +void sub_806C994(u8 taskId, u8 b); u8 sub_806CA38(u8 taskID); void sub_806CB74(u8 taskId); void sub_806CCE4(void); diff --git a/ld_script.txt b/ld_script.txt index b122d8ab5..7b5e18167 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -107,7 +107,6 @@ SECTIONS { src/field_tasks.o(.text); src/clock.o(.text); src/reset_rtc_screen.o(.text); - asm/party_menu.o(.text); src/party_menu.o(.text); src/start_menu.o(.text); src/menu.o(.text); diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index 9a71c09e8..fdc1d503d 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -22,7 +22,6 @@ extern u8 ewram[]; #define UNK_201606C_ARRAY (ewram + 0x1606C) // lazy define but whatever. -extern u8 IsLinkDoubleBattle(void); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void nullsub_13(void); @@ -34,7 +33,6 @@ extern void sub_806AEDC(void); extern u8 *sub_8040D08(); extern void sub_8040B8C(void); extern void nullsub_14(); -extern void OpenPartyMenu(); extern u8 sub_803FBBC(void); extern u8 gPlayerPartyCount; diff --git a/src/choose_party.c b/src/choose_party.c index f798baab1..cd63947a4 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -42,27 +42,20 @@ extern const u16 gBattleTowerBanlist[]; EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; -extern void OpenPartyMenu(); extern u8 sub_806BD58(u8, u8); extern void PartyMenuPrintMonsLevelOrStatus(void); extern void sub_806BC3C(u8, u8); extern u8 sub_806B58C(u8); -extern u16 sub_806BE38(); -extern u8 sub_806CA38(); extern u8 sub_806B124(); -extern void sub_806C994(); extern void sub_806C658(); extern void sub_806AEDC(void); extern void sub_806AF4C(); extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int); -extern void sub_806C890(); -extern void sub_806B908(void); extern void CreateMonIcon_806D99C(int, u8, int, struct UnknownPokemonStruct2 *); extern void CreateHeldItemIcon_806DCD4(int, u8, int); extern u8 GetMonStatusAndPokerus(); extern void PartyMenuPrintHP(); extern bool8 sub_80F9344(void); -extern void sub_806BCE8(void); static void ClearPartySelection(void); static bool8 IsMonAllowedInBattleTower(struct Pokemon *); diff --git a/src/naming_screen.c b/src/naming_screen.c index 3f8417e6d..a20a15569 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -30,6 +30,8 @@ extern u8 unk_2000000[]; #define namingScreenData (*(struct NamingScreenData *)(unk_2000000)) +extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); + const u32 gSpriteImage_83CE094[] = INCBIN_U32("graphics/naming_screen/pc_icon/0.4bpp"); const u32 gSpriteImage_83CE154[] = INCBIN_U32("graphics/naming_screen/pc_icon/1.4bpp"); diff --git a/src/party_menu.c b/src/party_menu.c index 0f7e95612..b84b139bc 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -14,6 +14,7 @@ #include "mail_data.h" #include "main.h" #include "menu.h" +#include "menu_helpers.h" #include "palette.h" #include "pokemon.h" #include "pokemon_icon.h" @@ -29,12 +30,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" -#include "sprite.h" -#include "palette.h" -#include "event_data.h" -#include "main.h" -#include "battle_interface.h" -#include "species.h" +#include "util.h" struct Unk201C000 { @@ -62,7 +58,7 @@ struct UnknownStruct5 u16 *unk4; }; -struct GenderIconCoords +struct Coords8 { u8 x; u8 y; @@ -90,9 +86,18 @@ struct UnknownPokemonStruct2 /*0x1D*/ u8 language; }; +struct PartyMenuFunctionsStruct +{ + /*0x0*/TaskFunc func1; + /*0x4*/TaskFunc func2; + /*0x8*/u8 unk8; +}; + #define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) #define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000)) +extern u16 gBattleTypeFlags; + extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F6; extern u16 gUnknown_0202E8F8; @@ -102,10 +107,19 @@ extern u8 gPlayerPartyCount; extern s32 gBattleMoveDamage; extern u16 gMoveToLearn; -extern struct GenderIconCoords const gUnknown_08376738[12][6]; -extern struct GenderIconCoords const gUnknown_08376678[12][6]; +extern struct PartyMenuFunctionsStruct const gUnknown_08376C74[]; +extern u8 gUnknown_083769D8[]; +extern u8 gUnknown_08376A25[]; +extern u8 gUnknown_08376A5E[]; +extern u16 gUnknown_08E9A300[]; +extern const u16 gUnknown_08376CD4[]; +extern const u16 gUnknown_08376CEC[]; +extern u16 *const gUnknown_08376918[2][PARTY_SIZE]; +extern struct Coords8 const gUnknown_08376738[12][6]; +extern struct Coords8 const gUnknown_08376678[12][6]; extern struct PartyMenuWindowCoords const gUnknown_08376948[2][6]; extern struct PartyMenuWindowCoords const gUnknown_08376978[2][6]; +extern struct Coords8 const gUnknown_083768B8[3][8]; extern u8 *const gUnknown_08376624[]; extern const u8 gUnknown_083769C0[]; //extern const u16 gUnknown_083769A8[][6]; @@ -144,22 +158,8 @@ static void sub_8070D90(u8 taskId); static void sub_806D5B8(u8 taskId); static void sub_806D014(u8 taskId); static void sub_806D118(u8 taskId); - -/* -void sub_806AEDC(void) -{ - const struct UnknownStruct5 *r5; - s32 i; - - AnimateSprites(); - BuildOamBuffer(); - r5 = gUnknown_08376BB4[gUnknown_0202E8FA]; - for (i = 0; i < 6; i++) - sub_800142C(r5[i].unk0 * 8, r5[i].unk1 * 8, r5[i].unk4, 0, (i << 5) | 0x200); - RunTasks(); - UpdatePaletteFade(); -} -*/ +static void sub_806B460(void); +static void sub_806B548(void); #if ENGLISH #define WINDOW_LEFT (3) @@ -175,14 +175,2548 @@ extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s extern void sub_809D62C(struct Sprite *sprite); extern void UpdateMonIconFrame_806DA0C(struct Sprite *sprite); extern void UpdateMonIconFrame_806DA38(struct Sprite *sprite); -extern void sub_806BB3C(s16 a, u8 b); -extern void sub_806BA94(s16 a, u8 b, u8 c, u8 d); -extern void sub_806B9A4(s16 a, u8 b, u8 c); extern void SpriteCB_sub_806D37C(struct Sprite *sprite); -extern void sub_806BA34(s16 a, u8 b); -extern void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); extern void sub_806CD44(u8 taskId); +extern u8 sub_806CA00(u8 taskId); +extern void sub_806BA34(s16 a, u16 b); +extern void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c); +extern void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed); +extern void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed); +extern void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed); +extern void sub_806C658(u8 taskId, s8 directionPressed); +extern void sub_806CA18(u8 taskId, u8 b); +extern void sub_806B9A4(s16 a, u16 b, u8 c); +extern void sub_806BA94(s16 a, u16 b, u8 c, u8 d); + + +#ifdef NONMATCHING +void sub_806AEDC(void) +{ + const struct UnknownStruct5 *var1; + s32 i; + + AnimateSprites(); + BuildOamBuffer(); + + var1 = gUnknown_08376BB4[gUnknown_0202E8FA]; + for (i = 0; i < 6; i++) + { + sub_800142C(var1[i].unk0 * 8, var1[i].unk1 * 8, var1[i].unk4, 0, (i << 5) | 0x200); + } + + RunTasks(); + UpdatePaletteFade(); +} +#else +__attribute__((naked)) +void sub_806AEDC(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + bl AnimateSprites\n\ + bl BuildOamBuffer\n\ + ldr r0, _0806AF2C @ =gUnknown_0202E8FA\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 4\n\ + ldr r1, _0806AF30 @ =gUnknown_08376BB4\n\ + adds r5, r0, r1\n\ + movs r6, 0\n\ +_0806AEF8:\n\ + ldrb r0, [r5]\n\ + lsls r0, 3\n\ + ldrb r1, [r5, 0x1]\n\ + lsls r1, 3\n\ + ldr r2, [r5, 0x4]\n\ + lsls r3, r6, 5\n\ + movs r4, 0x80\n\ + lsls r4, 2\n\ + orrs r3, r4\n\ + str r3, [sp]\n\ + movs r3, 0\n\ + bl sub_800142C\n\ + adds r5, 0x8\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _0806AEF8\n\ + bl RunTasks\n\ + bl UpdatePaletteFade\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806AF2C: .4byte gUnknown_0202E8FA\n\ +_0806AF30: .4byte gUnknown_08376BB4\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_806AF34(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_806B548(); +} + +void sub_806AF4C(u8 a, u8 battleFlags, TaskFunc func, u8 d) +{ + if (battleFlags != 0xFF) + { + gBattleTypeFlags = battleFlags; + } + + ewram1B000.unk258 = a; + ewram1B000.taskFunc = func; + ewram1B000.unk259 = d; +} + +void sub_806AF8C(u8 a, u8 battleFlags, TaskFunc func, u8 d) +{ + sub_806AF4C(a, battleFlags, func, d); + SetMainCallback2(sub_806B460); +} + +void OpenPartyMenu(u8 a, u8 battleFlags) +{ + sub_806AF8C(a, battleFlags, gUnknown_08376C74[a].func1, gUnknown_08376C74[a].unk8); +} + +__attribute__((naked)) +bool8 sub_806AFD0(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r1, _0806AFF0 @ =0x0201b000\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r0, r1, r2\n\ + movs r2, 0\n\ + ldrsh r0, [r0, r2]\n\ + adds r4, r1, 0\n\ + cmp r0, 0x9\n\ + bls _0806AFE6\n\ + b _0806B11A\n\ +_0806AFE6:\n\ + lsls r0, 2\n\ + ldr r1, _0806AFF4 @ =_0806AFF8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806AFF0: .4byte 0x0201b000\n\ +_0806AFF4: .4byte _0806AFF8\n\ + .align 2, 0\n\ +_0806AFF8:\n\ + .4byte _0806B020\n\ + .4byte _0806B060\n\ + .4byte _0806B066\n\ + .4byte _0806B07A\n\ + .4byte _0806B0A4\n\ + .4byte _0806B0AA\n\ + .4byte _0806B0BC\n\ + .4byte _0806B0C2\n\ + .4byte _0806B0D4\n\ + .4byte _0806B0EC\n\ +_0806B020:\n\ + ldr r0, _0806B048 @ =0x00000266\n\ + adds r5, r4, r0\n\ + movs r1, 0\n\ + ldrsh r3, [r5, r1]\n\ + ldr r0, _0806B04C @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r3, r0\n\ + bge _0806B054\n\ + movs r2, 0x98\n\ + lsls r2, 2\n\ + adds r0, r4, r2\n\ + ldrb r0, [r0]\n\ + ldrb r1, [r5]\n\ + movs r2, 0x64\n\ + muls r2, r3\n\ + ldr r3, _0806B050 @ =gPlayerParty\n\ + adds r2, r3\n\ + bl TryCreatePartyMenuMonIcon\n\ + b _0806B114\n\ + .align 2, 0\n\ +_0806B048: .4byte 0x00000266\n\ +_0806B04C: .4byte gPlayerPartyCount\n\ +_0806B050: .4byte gPlayerParty\n\ +_0806B054:\n\ + movs r0, 0\n\ + strh r0, [r5]\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r4, r0\n\ + b _0806B0E0\n\ +_0806B060:\n\ + bl LoadHeldItemIconGraphics\n\ + b _0806B0D8\n\ +_0806B066:\n\ + movs r1, 0x98\n\ + lsls r1, 2\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + bl CreateHeldItemIcons_806DC34\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r1, r4, r2\n\ + b _0806B0E0\n\ +_0806B07A:\n\ + movs r1, 0x98\n\ + lsls r1, 2\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + ldr r2, _0806B0A0 @ =0x00000266\n\ + adds r5, r4, r2\n\ + ldrb r1, [r5]\n\ + bl sub_806BD58\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B114\n\ + movs r0, 0\n\ + strh r0, [r5]\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r4, r0\n\ + b _0806B0E0\n\ + .align 2, 0\n\ +_0806B0A0: .4byte 0x00000266\n\ +_0806B0A4:\n\ + bl PartyMenuPrintMonsLevelOrStatus\n\ + b _0806B0D8\n\ +_0806B0AA:\n\ + bl PrintPartyMenuMonNicknames\n\ + ldr r1, _0806B0B8 @ =0x0201b000\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + b _0806B0E0\n\ + .align 2, 0\n\ +_0806B0B8: .4byte 0x0201b000\n\ +_0806B0BC:\n\ + bl PartyMenuTryPrintMonsHP\n\ + b _0806B0D8\n\ +_0806B0C2:\n\ + bl nullsub_13\n\ + ldr r1, _0806B0D0 @ =0x0201b000\n\ + movs r0, 0x99\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + b _0806B0E0\n\ + .align 2, 0\n\ +_0806B0D0: .4byte 0x0201b000\n\ +_0806B0D4:\n\ + bl PartyMenuDrawHPBars\n\ +_0806B0D8:\n\ + ldr r1, _0806B0E8 @ =0x0201b000\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r1, r2\n\ +_0806B0E0:\n\ + ldrh r0, [r1]\n\ + adds r0, 0x1\n\ + strh r0, [r1]\n\ + b _0806B11A\n\ + .align 2, 0\n\ +_0806B0E8: .4byte 0x0201b000\n\ +_0806B0EC:\n\ + ldr r0, _0806B110 @ =0x00000266\n\ + adds r5, r4, r0\n\ + ldrb r0, [r5]\n\ + bl sub_806B58C\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B114\n\ + movs r1, 0\n\ + strh r1, [r5]\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r0, r4, r2\n\ + strh r1, [r0]\n\ + movs r0, 0x1\n\ + b _0806B11C\n\ + .align 2, 0\n\ +_0806B110: .4byte 0x00000266\n\ +_0806B114:\n\ + ldrh r0, [r5]\n\ + adds r0, 0x1\n\ + strh r0, [r5]\n\ +_0806B11A:\n\ + movs r0, 0\n\ +_0806B11C:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +__attribute__((naked)) +bool8 sub_806B124(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0xC\n\ + ldr r0, _0806B144 @ =gMain\n\ + ldr r1, _0806B148 @ =0x0000043c\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x11\n\ + bls _0806B13A\n\ + b _0806B450\n\ +_0806B13A:\n\ + lsls r0, 2\n\ + ldr r1, _0806B14C @ =_0806B150\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806B144: .4byte gMain\n\ +_0806B148: .4byte 0x0000043c\n\ +_0806B14C: .4byte _0806B150\n\ + .align 2, 0\n\ +_0806B150:\n\ + .4byte _0806B198\n\ + .4byte _0806B240\n\ + .4byte _0806B246\n\ + .4byte _0806B27C\n\ + .4byte _0806B282\n\ + .4byte _0806B2AC\n\ + .4byte _0806B2B2\n\ + .4byte _0806B2D0\n\ + .4byte _0806B2EC\n\ + .4byte _0806B318\n\ + .4byte _0806B344\n\ + .4byte _0806B37C\n\ + .4byte _0806B382\n\ + .4byte _0806B3C0\n\ + .4byte _0806B3CC\n\ + .4byte _0806B3E4\n\ + .4byte _0806B40C\n\ + .4byte _0806B440\n\ +_0806B198:\n\ + movs r0, 0\n\ + bl SetVBlankCallback\n\ + movs r3, 0xC0\n\ + lsls r3, 19\n\ + movs r4, 0xC0\n\ + lsls r4, 9\n\ + add r2, sp, 0x8\n\ + mov r8, r2\n\ + add r2, sp, 0x4\n\ + movs r6, 0\n\ + ldr r1, _0806B22C @ =0x040000d4\n\ + movs r5, 0x80\n\ + lsls r5, 5\n\ + ldr r7, _0806B230 @ =0x81000800\n\ + movs r0, 0x81\n\ + lsls r0, 24\n\ + mov r12, r0\n\ +_0806B1BC:\n\ + strh r6, [r2]\n\ + add r0, sp, 0x4\n\ + str r0, [r1]\n\ + str r3, [r1, 0x4]\n\ + str r7, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + adds r3, r5\n\ + subs r4, r5\n\ + cmp r4, r5\n\ + bhi _0806B1BC\n\ + strh r6, [r2]\n\ + add r2, sp, 0x4\n\ + str r2, [r1]\n\ + str r3, [r1, 0x4]\n\ + lsrs r0, r4, 1\n\ + mov r3, r12\n\ + orrs r0, r3\n\ + str r0, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + movs r0, 0xE0\n\ + lsls r0, 19\n\ + movs r3, 0x80\n\ + lsls r3, 3\n\ + movs r4, 0\n\ + str r4, [sp, 0x8]\n\ + ldr r2, _0806B22C @ =0x040000d4\n\ + mov r1, r8\n\ + str r1, [r2]\n\ + str r0, [r2, 0x4]\n\ + lsrs r0, r3, 2\n\ + movs r1, 0x85\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + str r0, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + movs r1, 0xA0\n\ + lsls r1, 19\n\ + add r0, sp, 0x4\n\ + strh r4, [r0]\n\ + str r0, [r2]\n\ + str r1, [r2, 0x4]\n\ + lsrs r3, 1\n\ + movs r0, 0x81\n\ + lsls r0, 24\n\ + orrs r3, r0\n\ + str r3, [r2, 0x8]\n\ + ldr r0, [r2, 0x8]\n\ + ldr r2, _0806B234 @ =gPaletteFade\n\ + ldrb r0, [r2, 0x8]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2, 0x8]\n\ + ldr r1, _0806B238 @ =gMain\n\ + ldr r2, _0806B23C @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B22C: .4byte 0x040000d4\n\ +_0806B230: .4byte 0x81000800\n\ +_0806B234: .4byte gPaletteFade\n\ +_0806B238: .4byte gMain\n\ +_0806B23C: .4byte 0x0000043c\n\ +_0806B240:\n\ + bl remove_some_task\n\ + b _0806B426\n\ +_0806B246:\n\ + bl sub_806B4A8\n\ + ldr r1, _0806B26C @ =0x0201b000\n\ + movs r2, 0x99\n\ + lsls r2, 2\n\ + adds r0, r1, r2\n\ + movs r2, 0\n\ + strh r2, [r0]\n\ + ldr r3, _0806B270 @ =0x00000266\n\ + adds r0, r1, r3\n\ + strh r2, [r0]\n\ + movs r0, 0x9A\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + strh r2, [r1]\n\ + ldr r1, _0806B274 @ =gMain\n\ + ldr r2, _0806B278 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B26C: .4byte 0x0201b000\n\ +_0806B270: .4byte 0x00000266\n\ +_0806B274: .4byte gMain\n\ +_0806B278: .4byte 0x0000043c\n\ +_0806B27C:\n\ + bl ResetSpriteData\n\ + b _0806B426\n\ +_0806B282:\n\ + ldr r0, _0806B2A0 @ =0x0201b000\n\ + movs r1, 0x96\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + beq _0806B298\n\ + cmp r0, 0x5\n\ + beq _0806B298\n\ + bl ResetTasks\n\ +_0806B298:\n\ + ldr r1, _0806B2A4 @ =gMain\n\ + ldr r2, _0806B2A8 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B2A0: .4byte 0x0201b000\n\ +_0806B2A4: .4byte gMain\n\ +_0806B2A8: .4byte 0x0000043c\n\ +_0806B2AC:\n\ + bl FreeAllSpritePalettes\n\ + b _0806B426\n\ +_0806B2B2:\n\ + ldr r4, _0806B2CC @ =0x0201b000\n\ + movs r1, 0x97\n\ + lsls r1, 2\n\ + adds r0, r4, r1\n\ + ldr r0, [r0]\n\ + movs r1, 0\n\ + bl CreateTask\n\ + movs r2, 0x98\n\ + lsls r2, 2\n\ + adds r1, r4, r2\n\ + strb r0, [r1]\n\ + b _0806B426\n\ + .align 2, 0\n\ +_0806B2CC: .4byte 0x0201b000\n\ +_0806B2D0:\n\ + ldr r0, _0806B2E0 @ =gWindowConfig_81E6C90\n\ + bl SetUpWindowConfig\n\ + ldr r1, _0806B2E4 @ =gMain\n\ + ldr r0, _0806B2E8 @ =0x0000043c\n\ + adds r1, r0\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B2E0: .4byte gWindowConfig_81E6C90\n\ +_0806B2E4: .4byte gMain\n\ +_0806B2E8: .4byte 0x0000043c\n\ +_0806B2EC:\n\ + ldr r4, _0806B308 @ =gUnknown_03004210\n\ + ldr r1, _0806B30C @ =gWindowConfig_81E6C90\n\ + adds r0, r4, 0\n\ + bl InitWindowFromConfig\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + bl MultistepInitWindowTileData\n\ + ldr r1, _0806B310 @ =gMain\n\ + ldr r2, _0806B314 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B308: .4byte gUnknown_03004210\n\ +_0806B30C: .4byte gWindowConfig_81E6C90\n\ +_0806B310: .4byte gMain\n\ +_0806B314: .4byte 0x0000043c\n\ +_0806B318:\n\ + bl MultistepLoadFont\n\ + cmp r0, 0\n\ + bne _0806B322\n\ + b _0806B450\n\ +_0806B322:\n\ + ldr r0, _0806B338 @ =0x0201b000\n\ + movs r3, 0x99\n\ + lsls r3, 2\n\ + adds r0, r3\n\ + movs r1, 0x1\n\ + strh r1, [r0]\n\ + ldr r1, _0806B33C @ =gMain\n\ + ldr r0, _0806B340 @ =0x0000043c\n\ + adds r1, r0\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B338: .4byte 0x0201b000\n\ +_0806B33C: .4byte gMain\n\ +_0806B340: .4byte 0x0000043c\n\ +_0806B344:\n\ + ldr r0, _0806B368 @ =0x0201b000\n\ + movs r1, 0x99\n\ + lsls r1, 2\n\ + adds r4, r0, r1\n\ + ldrb r0, [r4]\n\ + bl LoadPartyMenuGraphics\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B374\n\ + movs r0, 0\n\ + strh r0, [r4]\n\ + ldr r1, _0806B36C @ =gMain\n\ + ldr r2, _0806B370 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B368: .4byte 0x0201b000\n\ +_0806B36C: .4byte gMain\n\ +_0806B370: .4byte 0x0000043c\n\ +_0806B374:\n\ + ldrh r0, [r4]\n\ + adds r0, 0x1\n\ + strh r0, [r4]\n\ + b _0806B450\n\ +_0806B37C:\n\ + bl sub_809D51C\n\ + b _0806B426\n\ +_0806B382:\n\ + ldr r2, _0806B3B0 @ =gUnknown_08376C74\n\ + ldr r0, _0806B3B4 @ =0x0201b000\n\ + movs r1, 0x96\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r2, 0x4\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + bl _call_via_r0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B450\n\ + ldr r1, _0806B3B8 @ =gMain\n\ + ldr r2, _0806B3BC @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B3B0: .4byte gUnknown_08376C74\n\ +_0806B3B4: .4byte 0x0201b000\n\ +_0806B3B8: .4byte gMain\n\ +_0806B3BC: .4byte 0x0000043c\n\ +_0806B3C0:\n\ + ldr r0, _0806B3C8 @ =gWindowConfig_81E6CC8\n\ + bl MultistepInitMenuWindowBegin\n\ + b _0806B426\n\ + .align 2, 0\n\ +_0806B3C8: .4byte gWindowConfig_81E6CC8\n\ +_0806B3CC:\n\ + bl MultistepInitMenuWindowContinue\n\ + cmp r0, 0\n\ + beq _0806B450\n\ + ldr r1, _0806B3DC @ =gMain\n\ + ldr r0, _0806B3E0 @ =0x0000043c\n\ + adds r1, r0\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B3DC: .4byte gMain\n\ +_0806B3E0: .4byte 0x0000043c\n\ +_0806B3E4:\n\ + ldr r0, _0806B3FC @ =0x0201b000\n\ + ldr r1, _0806B400 @ =0x00000259\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + movs r1, 0\n\ + bl sub_806D538\n\ + ldr r1, _0806B404 @ =gMain\n\ + ldr r2, _0806B408 @ =0x0000043c\n\ + adds r1, r2\n\ + b _0806B42C\n\ + .align 2, 0\n\ +_0806B3FC: .4byte 0x0201b000\n\ +_0806B400: .4byte 0x00000259\n\ +_0806B404: .4byte gMain\n\ +_0806B408: .4byte 0x0000043c\n\ +_0806B40C:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + movs r1, 0\n\ + str r1, [sp]\n\ + movs r2, 0x10\n\ + movs r3, 0\n\ + bl BeginNormalPaletteFade\n\ + ldr r2, _0806B434 @ =gPaletteFade\n\ + ldrb r1, [r2, 0x8]\n\ + movs r0, 0x7F\n\ + ands r0, r1\n\ + strb r0, [r2, 0x8]\n\ +_0806B426:\n\ + ldr r1, _0806B438 @ =gMain\n\ + ldr r3, _0806B43C @ =0x0000043c\n\ + adds r1, r3\n\ +_0806B42C:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _0806B450\n\ + .align 2, 0\n\ +_0806B434: .4byte gPaletteFade\n\ +_0806B438: .4byte gMain\n\ +_0806B43C: .4byte 0x0000043c\n\ +_0806B440:\n\ + ldr r0, _0806B44C @ =sub_806AF34\n\ + bl SetVBlankCallback\n\ + movs r0, 0x1\n\ + b _0806B452\n\ + .align 2, 0\n\ +_0806B44C: .4byte sub_806AF34\n\ +_0806B450:\n\ + movs r0, 0\n\ +_0806B452:\n\ + add sp, 0xC\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +void sub_806B460(void) +{ + while (sub_806B124() != TRUE) + { + if (sub_80F9344() == TRUE) + { + return; + } + } + + if (ewram1B000.unk258 != 5) + { + sub_806BF74(ewram1B000.unk260, 0); + } + + SetMainCallback2(sub_806AEDC); +} + +void sub_806B4A8(void) +{ + SetHBlankCallback(NULL); + REG_DISPCNT = 8000; + REG_BG0CNT = 0x1E05; + REG_BG1CNT = 0x703; + REG_BG2CNT = 0xF08; + REG_BG3CNT = 0x602; + REG_BLDCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG3VOFS = -1; +} + +bool8 IsLinkDoubleBattle() +{ + if ((gBattleTypeFlags & BATTLE_TYPE_LINK_DOUBLE) == BATTLE_TYPE_LINK_DOUBLE) + return TRUE; + else + return FALSE; +} + +#ifdef NONMATCHING +void sub_806B548(void) +{ + if (ewram1B000.unk261) + { + u32 src = (u32)&gBGTilemapBuffers[2]; + u32 dest = BG_VRAM + 0x3000; + + REG_DMA3SAD = src; + REG_DMA3DAD = dest; + REG_DMA3CNT = ((DMA_ENABLE) << 16) | 0x400; + + if (ewram1B000.unk261 == 2) + { + ewram1B000.unk261 = 0; + } + } +} +#else +__attribute__((naked)) +void sub_806B548(void) +{ + asm(".syntax unified\n\ + push {r4,lr}\n\ + ldr r0, _0806B574 @ =0x0201b000\n\ + ldr r1, _0806B578 @ =0x00000261\n\ + adds r4, r0, r1\n\ + ldrb r3, [r4]\n\ + cmp r3, 0\n\ + beq _0806B56E\n\ + ldr r1, _0806B57C @ =gBGTilemapBuffers + 0x1000\n\ + ldr r2, _0806B580 @ =0x06003000\n\ + ldr r0, _0806B584 @ =0x040000d4\n\ + str r1, [r0]\n\ + str r2, [r0, 0x4]\n\ + ldr r1, _0806B588 @ =0x80000400\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + cmp r3, 0x2\n\ + bne _0806B56E\n\ + movs r0, 0\n\ + strb r0, [r4]\n\ +_0806B56E:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806B574: .4byte 0x0201b000\n\ +_0806B578: .4byte 0x00000261\n\ +_0806B57C: .4byte gBGTilemapBuffers + 0x1000\n\ +_0806B580: .4byte 0x06003000\n\ +_0806B584: .4byte 0x040000d4\n\ +_0806B588: .4byte 0x80000400\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +__attribute__((naked)) +u8 sub_806B58C(u8 a) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0\n\ + bne _0806B5A8\n\ + ldr r0, _0806B5A4 @ =gUnknown_0202E8FA\n\ + strb r2, [r0]\n\ + b _0806B5C8\n\ + .align 2, 0\n\ +_0806B5A4: .4byte gUnknown_0202E8FA\n\ +_0806B5A8:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B5C0\n\ + ldr r1, _0806B5BC @ =gUnknown_0202E8FA\n\ + movs r0, 0x2\n\ + b _0806B5C4\n\ + .align 2, 0\n\ +_0806B5BC: .4byte gUnknown_0202E8FA\n\ +_0806B5C0:\n\ + ldr r1, _0806B5E4 @ =gUnknown_0202E8FA\n\ + movs r0, 0x1\n\ +_0806B5C4:\n\ + strb r0, [r1]\n\ + adds r0, r1, 0\n\ +_0806B5C8:\n\ + ldrb r0, [r0]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + ldr r0, _0806B5E8 @ =gUnknown_083769A8\n\ + adds r4, r1, r0\n\ + cmp r5, 0x8\n\ + bls _0806B5DA\n\ + b _0806B900\n\ +_0806B5DA:\n\ + lsls r0, r5, 2\n\ + ldr r1, _0806B5EC @ =_0806B5F0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806B5E4: .4byte gUnknown_0202E8FA\n\ +_0806B5E8: .4byte gUnknown_083769A8\n\ +_0806B5EC: .4byte _0806B5F0\n\ + .align 2, 0\n\ +_0806B5F0:\n\ + .4byte _0806B614\n\ + .4byte _0806B628\n\ + .4byte _0806B638\n\ + .4byte _0806B694\n\ + .4byte _0806B71A\n\ + .4byte _0806B7A2\n\ + .4byte _0806B832\n\ + .4byte _0806B8C6\n\ + .4byte _0806B8E8\n\ +_0806B614:\n\ + ldr r0, _0806B624 @ =gBGTilemapBuffers + 0x1000\n\ + movs r2, 0x80\n\ + lsls r2, 4\n\ + movs r1, 0\n\ + bl memset\n\ + b _0806B900\n\ + .align 2, 0\n\ +_0806B624: .4byte gBGTilemapBuffers + 0x1000\n\ +_0806B628:\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r4, 0x1]\n\ + movs r2, 0x3\n\ + bl sub_806B9A4\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ + b _0806B8A8\n\ +_0806B638:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B666\n\ + ldr r0, _0806B65C @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bls _0806B660\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B65C: .4byte gPlayerPartyCount\n\ +_0806B660:\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + b _0806B8BC\n\ +_0806B666:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B684\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r2, 0x4\n\ + bl sub_806B9A4\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + movs r2, 0x4\n\ + b _0806B8AA\n\ +_0806B684:\n\ + ldrb r0, [r4, 0x2]\n\ + ldrb r1, [r4, 0x3]\n\ + movs r2, 0x3\n\ + bl sub_806B9A4\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + b _0806B8A8\n\ +_0806B694:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B6C2\n\ + ldr r0, _0806B6B8 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + bls _0806B6BC\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x4\n\ + movs r1, 0x2\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B6B8: .4byte gPlayerPartyCount\n\ +_0806B6BC:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + b _0806B8BC\n\ +_0806B6C2:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B6F6\n\ + ldr r0, _0806B6EC @ =gPlayerParty + 2 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B6F0\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x4\n\ + movs r1, 0x2\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B6EC: .4byte gPlayerParty + 2 * 0x64\n\ +_0806B6F0:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + b _0806B8BC\n\ +_0806B6F6:\n\ + ldr r0, _0806B710 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + bls _0806B714\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x4\n\ + movs r1, 0x2\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B710: .4byte gPlayerPartyCount\n\ +_0806B714:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + b _0806B8BC\n\ +_0806B71A:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B74A\n\ + ldr r0, _0806B740 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + bls _0806B744\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x6\n\ + movs r1, 0x3\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B740: .4byte gPlayerPartyCount\n\ +_0806B744:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + b _0806B8BC\n\ +_0806B74A:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B77E\n\ + ldr r0, _0806B774 @ =gPlayerParty + 3 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B778\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x6\n\ + movs r1, 0x3\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B774: .4byte gPlayerParty + 3 * 0x64\n\ +_0806B778:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + b _0806B8BC\n\ +_0806B77E:\n\ + ldr r0, _0806B798 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x3\n\ + bls _0806B79C\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0x6\n\ + movs r1, 0x3\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B798: .4byte gPlayerPartyCount\n\ +_0806B79C:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + b _0806B8BC\n\ +_0806B7A2:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B7D2\n\ + ldr r0, _0806B7C8 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bls _0806B7CC\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ + movs r1, 0x4\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B7C8: .4byte gPlayerPartyCount\n\ +_0806B7CC:\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + b _0806B8BC\n\ +_0806B7D2:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B80A\n\ + ldr r0, _0806B800 @ =gPlayerParty + 4 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B804\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ + movs r1, 0x4\n\ + movs r2, 0x4\n\ + b _0806B8AA\n\ + .align 2, 0\n\ +_0806B800: .4byte gPlayerParty + 4 * 0x64\n\ +_0806B804:\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + b _0806B884\n\ +_0806B80A:\n\ + ldr r0, _0806B828 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bls _0806B82C\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0x8\n\ + movs r1, 0x4\n\ + b _0806B8A8\n\ + .align 2, 0\n\ +_0806B828: .4byte gPlayerPartyCount\n\ +_0806B82C:\n\ + ldrb r0, [r4, 0x8]\n\ + ldrb r1, [r4, 0x9]\n\ + b _0806B8BC\n\ +_0806B832:\n\ + bl IsDoubleBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0806B84C\n\ + ldr r0, _0806B848 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bhi _0806B896\n\ + b _0806B8B8\n\ + .align 2, 0\n\ +_0806B848: .4byte gPlayerPartyCount\n\ +_0806B84C:\n\ + bl IsLinkDoubleBattle\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _0806B88E\n\ + ldr r0, _0806B87C @ =gPlayerParty + 5 * 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B880\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ + movs r2, 0\n\ + movs r3, 0x4\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0xA\n\ + movs r1, 0x5\n\ + movs r2, 0x4\n\ + b _0806B8AA\n\ + .align 2, 0\n\ +_0806B87C: .4byte gPlayerParty + 5 * 0x64\n\ +_0806B880:\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ +_0806B884:\n\ + movs r2, 0x1\n\ + movs r3, 0x4\n\ + bl sub_806BA94\n\ + b _0806B900\n\ +_0806B88E:\n\ + ldr r0, _0806B8B4 @ =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bls _0806B8B8\n\ +_0806B896:\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + adds r0, r4, 0\n\ + adds r0, 0xA\n\ + movs r1, 0x5\n\ +_0806B8A8:\n\ + movs r2, 0x3\n\ +_0806B8AA:\n\ + movs r3, 0\n\ + bl sub_806BF24\n\ + b _0806B900\n\ + .align 2, 0\n\ +_0806B8B4: .4byte gPlayerPartyCount\n\ +_0806B8B8:\n\ + ldrb r0, [r4, 0xA]\n\ + ldrb r1, [r4, 0xB]\n\ +_0806B8BC:\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + b _0806B900\n\ +_0806B8C6:\n\ + ldr r0, _0806B8E4 @ =0x0201b000\n\ + movs r1, 0x96\n\ + lsls r1, 2\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + bne _0806B8DA\n\ + movs r0, 0x1\n\ + bl sub_806BB9C\n\ +_0806B8DA:\n\ + movs r0, 0x1\n\ + bl sub_806BBEC\n\ + b _0806B900\n\ + .align 2, 0\n\ +_0806B8E4: .4byte 0x0201b000\n\ +_0806B8E8:\n\ + ldr r0, _0806B8F8 @ =0x0201b000\n\ + ldr r1, _0806B8FC @ =0x00000261\n\ + adds r0, r1\n\ + movs r1, 0x2\n\ + strb r1, [r0]\n\ + movs r0, 0x1\n\ + b _0806B902\n\ + .align 2, 0\n\ +_0806B8F8: .4byte 0x0201b000\n\ +_0806B8FC: .4byte 0x00000261\n\ +_0806B900:\n\ + movs r0, 0\n\ +_0806B902:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} + +#ifdef NONMATCHING +void sub_806B908(void) +{ + memset(&gBGTilemapBuffers[2], 0, 0x800); + gUnknown_0202E8FA = 3; + sub_806B9A4(gUnknown_083769C0[12], gUnknown_083769C0[13], 3); + + if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES)) + sub_806BA94(gUnknown_083769C0[16], gUnknown_083769C0[17], 0, 3); + else + sub_806BA94(gUnknown_083769C0[16], gUnknown_083769C0[17], 1, 3); + + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) + sub_806BA94(gUnknown_083769C0[18], gUnknown_083769C0[19], 0, 3); + else + sub_806BA94(gUnknown_083769C0[18], gUnknown_083769C0[19], 1, 3); + + ewram1B000.unk261 = 2; +} +#else +__attribute__((naked)) +void sub_806B908(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r0, _0806B948 @ =gBGTilemapBuffers + 0x1000\n\ + movs r2, 0x80\n\ + lsls r2, 4\n\ + movs r1, 0\n\ + bl memset\n\ + ldr r1, _0806B94C @ =gUnknown_0202E8FA\n\ + movs r0, 0x3\n\ + strb r0, [r1]\n\ + ldr r0, _0806B950 @ =gUnknown_083769A8\n\ + adds r4, r0, 0\n\ + adds r4, 0x24\n\ + ldr r5, _0806B954 @ =gPlayerParty + 1 * 0x64\n\ + ldrb r0, [r4]\n\ + ldrb r1, [r4, 0x1]\n\ + movs r2, 0x3\n\ + bl sub_806B9A4\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B958\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + b _0806B964\n\ + .align 2, 0\n\ +_0806B948: .4byte gBGTilemapBuffers + 0x1000\n\ +_0806B94C: .4byte gUnknown_0202E8FA\n\ +_0806B950: .4byte gUnknown_083769A8\n\ +_0806B954: .4byte gPlayerParty + 1 * 0x64\n\ +_0806B958:\n\ + ldrb r0, [r4, 0x4]\n\ + ldrb r1, [r4, 0x5]\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ +_0806B964:\n\ + adds r0, r5, 0\n\ + adds r0, 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806B980\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ + b _0806B98C\n\ +_0806B980:\n\ + ldrb r0, [r4, 0x6]\n\ + ldrb r1, [r4, 0x7]\n\ + movs r2, 0x1\n\ + movs r3, 0x3\n\ + bl sub_806BA94\n\ +_0806B98C:\n\ + ldr r0, _0806B99C @ =0x0201b000\n\ + ldr r1, _0806B9A0 @ =0x00000261\n\ + adds r0, r1\n\ + movs r1, 0x2\n\ + strb r1, [r0]\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806B99C: .4byte 0x0201b000\n\ +_0806B9A0: .4byte 0x00000261\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_806B9A4(s16 a, u16 b, u8 c) +{ + u8 i; + u16 var1 = b * 32; + + for (i = 0; i <= 6; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + for (; j <= 10 && a + j <= 0x1F; j++) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = (c << 12) | gUnknown_083769D8[i * 11 + j]; + } + } + } + } +} + +void sub_806BA34(s16 a, u16 b) +{ + u8 i; + u16 var1 = b * 32; + + for (i = 0; i <= 6; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + for (; j <= 10 && a + j <= 0x1F; j++) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = 0; + } + } + } + } +} + +void sub_806BA94(s16 a, u16 b, u8 c, u8 d) +{ + u8 i; + u8 *arr; + u16 var1; + + arr = gUnknown_08376A5E; + if (c == 0) + { + arr = gUnknown_08376A25; + } + + var1 = b * 32; + + + for (i = 0; i < 3; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + while (j <= 0x12 && a + j <= 0x1F) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = (d << 12) | arr[i * 19 + j]; + } + + j++; + } + } + } +} + +void sub_806BB3C(s16 a, u16 b) +{ + u8 i; + u16 var1 = (b * 32); + + for (i = 0; i < 3; i++) + { + u8 j = 0; + + if (a <= 0x1F) + { + for (; j <= 0x12 && a + j <= 0x1F; j++) + { + if (a + j >= 0) + { + gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = 0; + } + } + } + } +} + +void sub_806BB9C(u8 a) +{ + u8 i; + u16 *vramPtr; + const u16 arr[12]; + + memcpy(&arr, gUnknown_08376CD4, 12 * 2); + + vramPtr = (u16 *)(BG_VRAM + 0x3C30); + for (i = 0; i < PARTY_SIZE; i++) + { + vramPtr[i] = arr[i] + (a << 12); + vramPtr[i + 0x20] = arr[i + PARTY_SIZE] + (a << 12); + } +} + +void sub_806BBEC(u8 a) +{ + u8 i; + u16 *vramPtr; + const u16 arr[12]; + + memcpy(&arr, gUnknown_08376CEC, 12 * 2); + + vramPtr = (u16 *)(BG_VRAM + 0x3CB0); + for (i = 0; i < PARTY_SIZE; i++) + { + vramPtr[i] = arr[i] + (a << 12); + vramPtr[i + 0x20] = arr[i + PARTY_SIZE] + (a << 12); + } +} + +#ifdef NONMATCHING +// The original THUMB is preserving r8 for seemingly no reason. Unsure how to match. +void sub_806BC3C(u8 monIndex, u8 b) +{ + u16 *vramPtr = gUnknown_08376918[IsDoubleBattle()][monIndex]; + u8 i; + u16 var1; + + for (i = 0, var1 = (b / 7) * 32; i <= PARTY_SIZE; i++) + { + u32 offset = i + var1; + vramPtr[i] = gUnknown_08E9A300[offset] + 0x10C; + vramPtr[i + 0x20] = gUnknown_08E9A300[offset + 0x20] + 0x10C; + } +} +#else +__attribute__((naked)) +void sub_806BC3C(u8 monIndex, u8 b) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + adds r4, r0, 0\n\ + adds r5, r1, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + ldr r6, _0806BCB0 @ =gUnknown_08376918\n\ + bl IsDoubleBattle\n\ + lsls r4, 2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r4, r1\n\ + adds r4, r6\n\ + ldr r7, [r4]\n\ + movs r6, 0\n\ + adds r0, r5, 0\n\ + movs r1, 0x7\n\ + bl __udivsi3\n\ + lsls r0, 24\n\ + lsrs r4, r0, 19\n\ + ldr r5, _0806BCB4 @ =gUnknown_08E9A300\n\ + movs r0, 0x86\n\ + lsls r0, 1\n\ + adds r3, r0, 0\n\ +_0806BC7C:\n\ + adds r1, r6, r4\n\ + lsls r2, r6, 1\n\ + adds r2, r7\n\ + lsls r0, r1, 1\n\ + adds r0, r5\n\ + ldrh r0, [r0]\n\ + adds r0, r3, r0\n\ + strh r0, [r2]\n\ + adds r2, 0x40\n\ + adds r1, 0x20\n\ + lsls r1, 1\n\ + adds r1, r5\n\ + ldrh r1, [r1]\n\ + adds r0, r3, r1\n\ + strh r0, [r2]\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x6\n\ + bls _0806BC7C\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806BCB0: .4byte gUnknown_08376918\n\ +_0806BCB4: .4byte gUnknown_08E9A300\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void unref_sub_806BCB8(u8 a) +{ + u8 i; + + for (i = 0; i < gPlayerPartyCount; i++) + { + sub_806BC3C(i, a); + } +} + +void sub_806BCE8() +{ + u8 i; + + for (i = 0; i < gPlayerPartyCount; i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + u8 gender = GetMonGender(&gPlayerParty[i]); + switch (gender) + { + case MON_MALE: + sub_806BC3C(i, 0x54); + break; + case MON_FEMALE: + sub_806BC3C(i, 0x62); + break; + default: + sub_806BC3C(i, 0x46); + break; + } + } + else + { + sub_806BC3C(i, 0x46); + } + } +} + +u8 sub_806BD58(u8 taskId, u8 b) +{ + u8 spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + sub_806CA18(taskId, spriteId); + return 1; +} + +#ifdef NONMATCHING +u16 sub_806BD80(u8 taskId) +{ + s8 menuDirectionPressed = 0x0; + + switch (gMain.newAndRepeatedKeys) + { + case DPAD_UP: + menuDirectionPressed = 0xFF; + break; + case DPAD_DOWN: + menuDirectionPressed = 0x1; + break; + case DPAD_LEFT: + menuDirectionPressed = 0xFE; + break; + case DPAD_RIGHT: + menuDirectionPressed = 0x2; + break; + } + + if (menuDirectionPressed == 0) + { + u8 var1 = sub_80F92BC(); + switch (var1) + { + case 1: + menuDirectionPressed = 0xFF; + break; + case 2: + menuDirectionPressed = 0x1; + break; + } + + if (menuDirectionPressed == 0) + { + if ((gMain.newKeys & A_BUTTON) && gSprites[sub_806CA00(taskId)].data0 == 7) + { + // Selected "CANCEL" + return B_BUTTON; + } + else + { + return gMain.newKeys & (A_BUTTON | B_BUTTON); + } + } + } + + sub_806BF74(taskId, menuDirectionPressed); + return gMain.newAndRepeatedKeys; +} +#else +__attribute__((naked)) +u16 sub_806BD80(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + movs r4, 0\n\ + ldr r0, _0806BD9C @ =gMain\n\ + ldrh r0, [r0, 0x30]\n\ + cmp r0, 0x20\n\ + beq _0806BDB2\n\ + cmp r0, 0x20\n\ + bgt _0806BDA0\n\ + cmp r0, 0x10\n\ + beq _0806BDB6\n\ + b _0806BDB8\n\ + .align 2, 0\n\ +_0806BD9C: .4byte gMain\n\ +_0806BDA0:\n\ + cmp r0, 0x40\n\ + beq _0806BDAA\n\ + cmp r0, 0x80\n\ + beq _0806BDAE\n\ + b _0806BDB8\n\ +_0806BDAA:\n\ + movs r4, 0xFF\n\ + b _0806BDB8\n\ +_0806BDAE:\n\ + movs r4, 0x1\n\ + b _0806BDB8\n\ +_0806BDB2:\n\ + movs r4, 0xFE\n\ + b _0806BDB8\n\ +_0806BDB6:\n\ + movs r4, 0x2\n\ +_0806BDB8:\n\ + lsls r0, r4, 24\n\ + cmp r0, 0\n\ + bne _0806BDDC\n\ + bl sub_80F92BC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _0806BDD0\n\ + cmp r0, 0x2\n\ + beq _0806BDD4\n\ + b _0806BDD6\n\ +_0806BDD0:\n\ + movs r4, 0xFF\n\ + b _0806BDD6\n\ +_0806BDD4:\n\ + movs r4, 0x1\n\ +_0806BDD6:\n\ + lsls r0, r4, 24\n\ + cmp r0, 0\n\ + beq _0806BDF0\n\ +_0806BDDC:\n\ + asrs r1, r0, 24\n\ + adds r0, r5, 0\n\ + bl sub_806BF74\n\ + ldr r0, _0806BDEC @ =gMain\n\ + ldrh r0, [r0, 0x30]\n\ + b _0806BE2C\n\ + .align 2, 0\n\ +_0806BDEC: .4byte gMain\n\ +_0806BDF0:\n\ + ldr r0, _0806BE1C @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0806BE24\n\ + ldr r4, _0806BE20 @ =gSprites\n\ + adds r0, r5, 0\n\ + bl sub_806CA00\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + lsls r1, r0, 4\n\ + adds r1, r0\n\ + lsls r1, 2\n\ + adds r1, r4\n\ + movs r2, 0x2E\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0x7\n\ + bne _0806BE24\n\ + movs r0, 0x2\n\ + b _0806BE2C\n\ + .align 2, 0\n\ +_0806BE1C: .4byte gMain\n\ +_0806BE20: .4byte gSprites\n\ +_0806BE24:\n\ + ldr r0, _0806BE34 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x3\n\ + ands r0, r1\n\ +_0806BE2C:\n\ + pop {r4,r5}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_0806BE34: .4byte gMain\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +u16 sub_806BE38(u8 taskId) +{ + u8 menuDirectionPressed = 0x0; + switch (gMain.newAndRepeatedKeys) + { + case DPAD_UP: + menuDirectionPressed = 0xFF; + break; + case DPAD_DOWN: + menuDirectionPressed = 0x1; + break; + case DPAD_LEFT: + menuDirectionPressed = 0xFE; + break; + case DPAD_RIGHT: + menuDirectionPressed = 0x2; + break; + } + + if (menuDirectionPressed == 0) + { + u8 var1 = sub_80F92BC(); + switch (var1) + { + case 1: + menuDirectionPressed = 0xFF; + break; + case 2: + menuDirectionPressed = 0x1; + break; + } + } + + if (gMain.newKeys & START_BUTTON) + { + sub_806C890(taskId); + return START_BUTTON; + } + else + { + s8 signedMenuDirection = menuDirectionPressed; + if (signedMenuDirection) + { + sub_806C658(taskId, signedMenuDirection); + return gMain.newAndRepeatedKeys; + } + else + { + if (gMain.newKeys & A_BUTTON) + { + if (gSprites[sub_806CA00(taskId)].data0 == 7) + { + return B_BUTTON; + } + } + } + } + + return gMain.newKeys & (A_BUTTON | B_BUTTON); +} + +void task_pc_turn_off(const u8 *a, u8 b) +{ + if (a[0]) + sub_806BA94(a[0], a[1], 0, b); + else + sub_806B9A4(a[0], a[1], b); +} + +void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d) +{ + if (GetMonData(&gPlayerParty[monIndex], MON_DATA_SPECIES) && GetMonData(&gPlayerParty[monIndex], MON_DATA_HP) == 0) + c = PARTY_SIZE - 1; + + if (d == 1) + c += 4; + + task_pc_turn_off(a, c); +} + +void sub_806BF74(u8 taskId, s8 directionPressed) +{ + bool8 isLinkDoubleBattle; + u8 spriteId = sub_806CA00(taskId); + u8 menuIndex = gSprites[spriteId].data0; + + UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); + + isLinkDoubleBattle = IsLinkDoubleBattle(); + if (isLinkDoubleBattle == 1) + { + if (menuIndex == 0 || menuIndex == 2 || menuIndex == 3) + sub_806BF24(&gUnknown_083769C0[menuIndex * 2], menuIndex, 3, 0); + if (menuIndex == 1 || menuIndex == 4 || menuIndex == 5) + sub_806BF24(&gUnknown_083769C0[menuIndex * 2], menuIndex, 4, 0); + if (menuIndex == 7) + sub_806BBEC(1); + + sub_806C490(spriteId, menuIndex, directionPressed); + + if (gSprites[spriteId].data0 == 0 || gSprites[spriteId].data0 == 2 || gSprites[spriteId].data0 == 3) + sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); + if (gSprites[spriteId].data0 == 1 || gSprites[spriteId].data0 == 4 || gSprites[spriteId].data0 == 5) + sub_806BF24(&gUnknown_083769C0[gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 4, 1); + if (gSprites[spriteId].data0 == 7) + sub_806BBEC(2); + + ewram1B000.unk261 = 2; + + gSprites[spriteId].pos1.x = gUnknown_083768B8[2][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[2][gSprites[spriteId].data0].y; + } + else + { + u8 isDoubleBattle = IsDoubleBattle(); + + if (menuIndex <= PARTY_SIZE - 1) + { + sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + menuIndex * 2], menuIndex, 3, 0); + } + else + { + sub_806BBEC(1); + } + + if (!isDoubleBattle) + { + sub_806C1E4(spriteId, menuIndex, directionPressed); + } + else + { + sub_806C310(spriteId, menuIndex, directionPressed); + } + + if (gSprites[spriteId].data0 <= PARTY_SIZE - 1) + { + sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data0 * 2], gSprites[spriteId].data0, 3, 1); + } + else + { + sub_806BBEC(2); + } + + ewram1B000.unk261 = 2; + + gSprites[spriteId].pos1.x = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[isDoubleBattle][gSprites[spriteId].data0].y; + } + + UpdateMonIconFrame_806DA44(taskId, gSprites[spriteId].data0, 1); + + if (menuIndex != gSprites[spriteId].data0) + { + PlaySE(5); + } +} + +void sub_806C1E4(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + u8 var1; + s8 menuMovement = directionPressed + 2; + + switch (menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 1: + if (menuIndex == 0) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = gPlayerPartyCount - 1; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == gPlayerPartyCount - 1) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 4: + if (gPlayerPartyCount > 1 && menuIndex == 0) + { + if (gSprites[spriteId].data1 == 0) + gSprites[spriteId].data1 = 1; + + gSprites[spriteId].data0 = gSprites[spriteId].data1; + } + break; + case 0: + var1 = menuIndex - 1; + if (var1 <= 4) { + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = menuIndex; + } + break; + } +} + +void sub_806C310(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + u8 var3; + s8 menuMovement = directionPressed + 2; + + switch(menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else if (menuIndex == gPlayerPartyCount - 1) { + gSprites[spriteId].data0 = 7; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 1: + if (menuIndex == 0) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = gPlayerPartyCount - 1; + } else { + s8 diff = directionPressed; + gSprites[spriteId].data0 += diff; + } + + gSprites[spriteId].data1 = 0; + break; + case 4: + if (menuIndex == 0) { + if (gPlayerPartyCount > 2) { + u16 var1 = gSprites[spriteId].data1 - 2; + if (var1 > 1) + gSprites[spriteId].data0 = 2; + else + gSprites[spriteId].data0 = gSprites[spriteId].data1; + } + } + else if (menuIndex == 1) { + if (gPlayerPartyCount > 4) { + u16 var1 = gSprites[spriteId].data1 - 4; + if (var1 <= 1) + gSprites[spriteId].data0 = gSprites[spriteId].data1; + else + gSprites[spriteId].data0 = 4; + } + } + break; + case 0: + var3 = menuIndex - 2; + if (var3 <= 1) { + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = menuIndex; + } else { + u8 var2 = menuIndex - 4; + if (var2 <= 1) { + gSprites[spriteId].data0 = 1; + gSprites[spriteId].data1 = menuIndex; + } + } + break; + } +} + +/*void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + s8 menuMovement; + s16 var1; + u8 var2; + + menuMovement = directionPressed + 2; + switch (menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else if (menuIndex == PARTY_SIZE - 1) { + gSprites[spriteId].data0 = 7; + } else { + // Put if statment here + while (menuIndex++ != PARTY_SIZE - 1) { + if (GetMonData(&gPlayerParty[menuIndex], MON_DATA_SPECIES)) + { + gSprites[spriteId].data0 = menuIndex; + gSprites[spriteId].data1 = 0; + return; + } + } + + gSprites[spriteId].data0 = 7; + } + + gSprites[spriteId].data1 = 0; + break; + case 1: + while (menuIndex-- != 0) { + if (GetMonData(gPlayerParty[menuIndex], MON_DATA_SPECIES)) + { + gSprites[spriteId].data0 = menuIndex; + gSprites[spriteId].data1 = 0; + return; + } + } + + gSprites[spriteId].data0 = 7; + gSprites[spriteId].data1 = 0; + break; + case 4: + if (menuIndex == 0) { + var1 = gSprites[spriteId].data1 - 2; + if (var1 > 1) { + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 2; + } else if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 3; + } + } else { + gSprites[spriteId].data0 = 1; + } + } else if (menuIndex == 1) { + var1 = gSprites[spriteId].data1 - 4; + if (var1 <= 1) { + gSprites[spriteId].data0 = var1; + } else { + if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 4; + } else if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) { + gSprites[spriteId].data0 = 5; + } + } + } + break; + case 0: + var2 = menuIndex - 2; + if (var2 <= 1) { + gSprites[spriteId].data0 = 0; + } else { + var2 = menuIndex - 4; + if (var2 <= 1) { + gSprites[spriteId].data0 = 1; + } + } + + gSprites[spriteId].data1 = menuIndex; + break; + } +}*/ +__attribute__((naked)) +void sub_806C490(u8 spriteId, u8 menuIndex, s8 directionPressed) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r1, 24\n\ + lsrs r4, r1, 24\n\ + lsls r2, 24\n\ + movs r0, 0x80\n\ + lsls r0, 18\n\ + adds r2, r0\n\ + asrs r0, r2, 24\n\ + cmp r0, 0x4\n\ + bls _0806C4AA\n\ + b _0806C64E\n\ +_0806C4AA:\n\ + lsls r0, 2\n\ + ldr r1, _0806C4B4 @ =_0806C4B8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_0806C4B4: .4byte _0806C4B8\n\ + .align 2, 0\n\ +_0806C4B8:\n\ + .4byte _0806C618\n\ + .4byte _0806C524\n\ + .4byte _0806C4CC\n\ + .4byte _0806C4E0\n\ + .4byte _0806C57C\n\ +_0806C4CC:\n\ + ldr r0, _0806C4DC @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r0, 0\n\ + strh r0, [r1, 0x30]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C4DC: .4byte gSprites\n\ +_0806C4E0:\n\ + cmp r4, 0x7\n\ + bne _0806C4FC\n\ + ldr r2, _0806C4F8 @ =gSprites\n\ + lsls r3, r5, 4\n\ + adds r0, r3, r5\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + movs r1, 0\n\ + strh r1, [r0, 0x2E]\n\ + adds r1, r2, 0\n\ + adds r6, r3, 0\n\ + b _0806C566\n\ + .align 2, 0\n\ +_0806C4F8: .4byte gSprites\n\ +_0806C4FC:\n\ + lsls r6, r5, 4\n\ + b _0806C518\n\ +_0806C500:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _0806C520 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0806C528\n\ +_0806C518:\n\ + cmp r4, 0x5\n\ + bne _0806C500\n\ + b _0806C558\n\ + .align 2, 0\n\ +_0806C520: .4byte gPlayerParty\n\ +_0806C524:\n\ + lsls r6, r5, 4\n\ + b _0806C554\n\ +_0806C528:\n\ + ldr r1, _0806C534 @ =gSprites\n\ + adds r0, r6, r5\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + strh r4, [r0, 0x2E]\n\ + b _0806C566\n\ + .align 2, 0\n\ +_0806C534: .4byte gSprites\n\ +_0806C538:\n\ + subs r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x6\n\ + beq _0806C554\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _0806C574 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _0806C528\n\ +_0806C554:\n\ + cmp r4, 0\n\ + bne _0806C538\n\ +_0806C558:\n\ + ldr r0, _0806C578 @ =gSprites\n\ + adds r1, r6, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r2, 0x7\n\ + strh r2, [r1, 0x2E]\n\ + adds r1, r0, 0\n\ +_0806C566:\n\ + adds r0, r6, r5\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + movs r1, 0\n\ + strh r1, [r0, 0x30]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C574: .4byte gPlayerParty\n\ +_0806C578: .4byte gSprites\n\ +_0806C57C:\n\ + cmp r4, 0\n\ + bne _0806C5C8\n\ + ldr r0, _0806C5AC @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r4, r1, r0\n\ + ldrh r1, [r4, 0x30]\n\ + subs r0, r1, 0x2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bls _0806C5E2\n\ + ldr r5, _0806C5B0 @ =gPlayerParty + 2 * 0x64\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C5B4\n\ + movs r0, 0x2\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C5AC: .4byte gSprites\n\ +_0806C5B0: .4byte gPlayerParty + 2 * 0x64\n\ +_0806C5B4:\n\ + adds r0, r5, 0\n\ + adds r0, 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C64E\n\ + movs r0, 0x3\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ +_0806C5C8:\n\ + cmp r4, 0x1\n\ + bne _0806C64E\n\ + ldr r0, _0806C5E8 @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r4, r1, r0\n\ + ldrh r1, [r4, 0x30]\n\ + subs r0, r1, 0x4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bhi _0806C5EC\n\ +_0806C5E2:\n\ + strh r1, [r4, 0x2E]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C5E8: .4byte gSprites\n\ +_0806C5EC:\n\ + ldr r5, _0806C600 @ =gPlayerParty + 4 * 0x64\n\ + adds r0, r5, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C604\n\ + movs r0, 0x4\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ + .align 2, 0\n\ +_0806C600: .4byte gPlayerParty + 4 * 0x64\n\ +_0806C604:\n\ + adds r0, r5, 0\n\ + adds r0, 0x64\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _0806C64E\n\ + movs r0, 0x5\n\ + strh r0, [r4, 0x2E]\n\ + b _0806C64E\n\ +_0806C618:\n\ + subs r0, r4, 0x2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bhi _0806C634\n\ + ldr r0, _0806C630 @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r0, 0\n\ + b _0806C64A\n\ + .align 2, 0\n\ +_0806C630: .4byte gSprites\n\ +_0806C634:\n\ + subs r0, r4, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bhi _0806C64E\n\ + ldr r0, _0806C654 @ =gSprites\n\ + lsls r1, r5, 4\n\ + adds r1, r5\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + movs r0, 0x1\n\ +_0806C64A:\n\ + strh r0, [r1, 0x2E]\n\ + strh r4, [r1, 0x30]\n\ +_0806C64E:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0806C654: .4byte gSprites\n\ + .syntax divided\n"); +} + + +// directionPressed = -2 for left, 2 for right, 1 for down, -1 for up +void sub_806C658(u8 taskId, s8 directionPressed) +{ + u16 newMenuIndex; + u8 newMenuIndex2; + u8 newMenuIndex3; + s8 menuMovement; + u8 spriteId = sub_806CA00(taskId); + u8 menuIndex = gSprites[spriteId].data0; + + UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); + + if (menuIndex < PARTY_SIZE) + { + sub_806BF24(&gUnknown_083769A8[menuIndex * 2], menuIndex, 3, 0); + } + else if (menuIndex == PARTY_SIZE) + { + sub_806BB9C(1); + } + else + { + sub_806BBEC(1); + } + + menuMovement = directionPressed + 2; + + switch (menuMovement) + { + case 2: + gSprites[spriteId].data1 = 0; + break; + case 1: + if (menuIndex == 0) { + gSprites[spriteId].data0 = 7; + } else if (menuIndex == PARTY_SIZE) { + gSprites[spriteId].data0 = gPlayerPartyCount - 1; + } else { + gSprites[spriteId].data0 += directionPressed; + } + + gSprites[spriteId].data1 = 0; + break; + case 3: + if (menuIndex == gPlayerPartyCount - 1) { + gSprites[spriteId].data0 = 6; + } else if (menuIndex == 7) { + gSprites[spriteId].data0 = 0; + } else { + gSprites[spriteId].data0 += directionPressed; + } + + gSprites[spriteId].data1 = 0; + break; + case 4: + if (gPlayerPartyCount > 1 && menuIndex == 0) + { + if (gSprites[spriteId].data1 == 0) { + gSprites[spriteId].data1 = 1; + } + + gSprites[spriteId].data0 = gSprites[spriteId].data1; + } + break; + case 0: + newMenuIndex3 = menuIndex - 1; + if (newMenuIndex3 <= 4) + { + gSprites[spriteId].data0 = 0; + gSprites[spriteId].data1 = menuIndex; + } + break; + } + + gSprites[spriteId].pos1.x = gUnknown_083768B8[0][gSprites[spriteId].data0].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[0][gSprites[spriteId].data0].y; + + + newMenuIndex = gSprites[spriteId].data0; + if (gSprites[spriteId].data0 <= PARTY_SIZE - 1) + { + sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data0 * 2], newMenuIndex, 3, 1); + } + else if (gSprites[spriteId].data0 == PARTY_SIZE) + { + sub_806BB9C(2); + } + else + { + sub_806BBEC(2); + } + + ewram1B000.unk261 = 2; + + newMenuIndex2 = gSprites[spriteId].data0; + UpdateMonIconFrame_806DA44(taskId, newMenuIndex2, 1); + + if (menuIndex != gSprites[spriteId].data0) + { + PlaySE(5); + } +} + +void sub_806C890(u8 taskId) +{ + u8 spriteId = sub_806CA00(taskId); + + u8 monIndex = gSprites[spriteId].data0; + if (monIndex != 6) + { + UpdateMonIconFrame_806DA44(taskId, monIndex, 0); + + if (monIndex < PARTY_SIZE) + { + sub_806BF24(&gUnknown_083769A8[monIndex * 2], monIndex, 3, 0); + } + else + { + sub_806BBEC(1); + } + + gSprites[spriteId].data1 = 0; + gSprites[spriteId].data0 = 6; + gSprites[spriteId].pos1.x = gUnknown_083768B8[0][6].x; + gSprites[spriteId].pos1.y = gUnknown_083768B8[0][6].y; + + sub_806BB9C(2); + + ewram1B000.unk261 = 2; + PlaySE(5); + } +} + +void sub_806C92C(u8 spriteId) +{ + u8 monIndex1 = gSprites[spriteId].data0; + u8 monIndex2 = gSprites[spriteId].data1; + + if (!IsDoubleBattle()) + { + if (monIndex1 < 1) { + if (monIndex2 < 1) { + monIndex2 = 1; + } + } else { + if (monIndex2 >= 1) { + monIndex2 = 0; + } + } + } else { + if (monIndex1 < 2) { + if (monIndex2 < 2) { + monIndex2 = 2; + } + } else { + if (monIndex2 >= 2) { + monIndex2 = 0; + } + } + } + + gSprites[spriteId].data1 = monIndex2; +} + +void sub_806C994(u8 taskId, u8 b) +{ + u8 spriteId = sub_806CA00(taskId); + + gSprites[spriteId].data0 = b; + sub_806C92C(spriteId); +} + +void sub_806C9C4(u8 taskId, u8 spriteId) +{ + u8 spriteId2 = sub_806CA00(taskId); + + gSprites[spriteId].pos1.x = gSprites[spriteId2].pos1.x; + gSprites[spriteId].pos1.y = gSprites[spriteId2].pos1.y; + gSprites[spriteId].data0 = gSprites[spriteId2].data0; +} + +u8 sub_806CA00(u8 taskId) +{ + return gTasks[taskId].data[3] >> 8; +} + +void sub_806CA18(u8 taskId, u8 b) +{ + u8 var1 = gTasks[taskId].data[3]; + gTasks[taskId].data[3] = var1 | (b << 8); +} + +u8 sub_806CA38(u8 taskId) +{ + u8 spriteId = sub_806CA00(taskId); + return gSprites[spriteId].data0; +} + +void sub_806CA60(u8 taskId) +{ + gTasks[taskId].func = TaskDummy; + ewram01000.unk0 = taskId; + + CreateTask(sub_806CB74, 0); + ewram01000.unk1 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + + sub_806C9C4(taskId, ewram01000.unk1); + ewram01000.unk2 = sub_806CA00(taskId); + + sub_806D538(ewram1B000_alt.unk272, 0); + + sub_806BF24(&gUnknown_083769A8[gSprites[ewram01000.unk1].data0 * 2], gSprites[ewram01000.unk1].data0, 6, 0); + ewram1B000.unk261 = 2; +} void sub_806CAFC(u8 a, s16 b) { @@ -1282,7 +3816,7 @@ void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES)) { - u8 isLinkDoubleBattle = IsLinkDoubleBattle(); + bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { PrintPartyMenuMonNickname(monIndex, 2, pokemon); @@ -1326,7 +3860,7 @@ void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status) static void PartyMenuClearLevelStatusTilemap(u8 monIndex) { - u8 isLinkDoubleBattle; + bool8 isLinkDoubleBattle; u8 b; u8 x; u8 y; @@ -1392,7 +3926,7 @@ void PartyMenuPrintMonLevelOrStatus(u8 monIndex, struct Pokemon *pokemon) if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { u8 statusAndPkrs; - u8 isLinkDoubleBattle; + bool8 isLinkDoubleBattle; u8 b; statusAndPkrs = GetMonStatusAndPokerus(pokemon); @@ -1490,7 +4024,7 @@ void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - u8 isLinkDoubleBattle = IsLinkDoubleBattle(); + bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); if (isLinkDoubleBattle == TRUE) { PartyMenuPrintHP(monIndex, 2, pokemon); @@ -1565,7 +4099,7 @@ void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - u8 isDoubleBattle = IsLinkDoubleBattle(); + bool8 isDoubleBattle = IsLinkDoubleBattle(); if (isDoubleBattle == TRUE) { PartyMenuDrawHPBar(monIndex, 2, pokemon); diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 249146b37..6e5926a6a 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -111,6 +111,8 @@ extern struct OamMatrix gOamMatrices[]; extern struct Struct_2017810 unk_2017810[]; extern u8 gHappinessMoveAnim; +extern u8 UpdateMonIconFrame(struct Sprite *sprite); + EWRAM_DATA union AffineAnimCmd *gUnknown_0202F7D4 = NULL; EWRAM_DATA u32 filler_0202F7D8[3] = {0}; |