diff options
author | yenatch <yenatch@gmail.com> | 2017-05-21 10:41:33 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-21 10:41:33 -0400 |
commit | bfe02a627f9f49a94f90835d4284ab89d4e5a6f9 (patch) | |
tree | a4f04fdf2aa813ba8e5b5e87d10e68cba39f3437 | |
parent | 332fde6cb8820aa89fe759b50a65eb069cc63329 (diff) | |
parent | 31e07eb09163f40c3cb79e1b26f21ffde9446014 (diff) |
Merge pull request #298 from camthesaxman/decompile_battle_2
decompile more of battle_2
-rw-r--r-- | asm/battle_2.s | 4792 | ||||
-rw-r--r-- | include/battle.h | 27 | ||||
-rw-r--r-- | src/battle_2.c | 2182 | ||||
-rw-r--r-- | src/rom3.c | 48 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 1 |
5 files changed, 1943 insertions, 5107 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s index f1c865a49..cff6efe06 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -6,4798 +6,6 @@ .text - thumb_func_start sub_800FCD4 -sub_800FCD4: @ 800FCD4 - push {lr} - ldr r0, _0800FCF4 @ =REG_VCOUNT - ldrh r0, [r0] - subs r0, 0x6F - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x30 - bhi _0800FCEE - ldr r1, _0800FCF8 @ =REG_BG0CNT - movs r2, 0x98 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] -_0800FCEE: - pop {r0} - bx r0 - .align 2, 0 -_0800FCF4: .4byte REG_VCOUNT -_0800FCF8: .4byte REG_BG0CNT - thumb_func_end sub_800FCD4 - - thumb_func_start sub_800FCFC -sub_800FCFC: @ 800FCFC - push {lr} - bl Random - ldr r1, _0800FD78 @ =REG_BG0HOFS - ldr r0, _0800FD7C @ =gUnknown_030042A4 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0800FD80 @ =gUnknown_030042A0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0800FD84 @ =gUnknown_030042C0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0800FD88 @ =gUnknown_030041B4 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0800FD8C @ =gUnknown_03004288 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0800FD90 @ =gUnknown_03004280 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0800FD94 @ =gUnknown_030041B0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - ldr r0, _0800FD98 @ =gUnknown_030041B8 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x22 - ldr r0, _0800FD9C @ =gUnknown_030042C4 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x4 - ldr r0, _0800FDA0 @ =gUnknown_03004240 - ldrh r0, [r0] - strh r0, [r1] - subs r1, 0x2 - ldr r0, _0800FDA4 @ =gUnknown_03004200 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x4 - ldr r0, _0800FDA8 @ =gUnknown_03004244 - ldrh r0, [r0] - strh r0, [r1] - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl sub_8089668 - pop {r0} - bx r0 - .align 2, 0 -_0800FD78: .4byte REG_BG0HOFS -_0800FD7C: .4byte gUnknown_030042A4 -_0800FD80: .4byte gUnknown_030042A0 -_0800FD84: .4byte gUnknown_030042C0 -_0800FD88: .4byte gUnknown_030041B4 -_0800FD8C: .4byte gUnknown_03004288 -_0800FD90: .4byte gUnknown_03004280 -_0800FD94: .4byte gUnknown_030041B0 -_0800FD98: .4byte gUnknown_030041B8 -_0800FD9C: .4byte gUnknown_030042C4 -_0800FDA0: .4byte gUnknown_03004240 -_0800FDA4: .4byte gUnknown_03004200 -_0800FDA8: .4byte gUnknown_03004244 - thumb_func_end sub_800FCFC - - thumb_func_start nullsub_36 -nullsub_36: @ 800FDAC - bx lr - thumb_func_end nullsub_36 - - thumb_func_start sub_800FDB0 -sub_800FDB0: @ 800FDB0 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _0800FDD0 - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - lsrs r0, 8 - ldrh r1, [r5, 0x30] - adds r0, r1 - strh r0, [r5, 0x20] - b _0800FDE2 -_0800FDD0: - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - asrs r0, 8 - ldrh r1, [r5, 0x30] - subs r1, r0 - strh r1, [r5, 0x20] -_0800FDE2: - movs r1, 0xC0 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r5, 0x32] - adds r0, r1 - strh r0, [r5, 0x32] - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0800FE16 - ldr r4, _0800FE1C @ =0x00002710 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - adds r0, r5, 0 - bl FreeSpriteOamMatrix - adds r0, r5, 0 - bl DestroySprite -_0800FE16: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800FE1C: .4byte 0x00002710 - thumb_func_end sub_800FDB0 - - thumb_func_start sub_800FE20 -sub_800FE20: @ 800FE20 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _0800FE3C @ =sub_800FDB0 - str r0, [r4, 0x1C] - movs r0, 0x68 - bl PlaySE - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800FE3C: .4byte sub_800FDB0 - thumb_func_end sub_800FE20 - - thumb_func_start sub_800FE40 -sub_800FE40: @ 800FE40 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - ldr r0, _0800FE88 @ =0x02000000 - ldr r2, _0800FE8C @ =0x000160cb - adds r0, r2 - ldrb r2, [r0] - ldr r0, _0800FE90 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800FEB4 - ldr r1, _0800FE94 @ =gLinkPlayers - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x18] - cmp r0, 0x1 - beq _0800FEA0 - cmp r0, 0x1 - bgt _0800FE98 - cmp r0, 0 - beq _0800FEB4 - b _0800FEBC - .align 2, 0 -_0800FE88: .4byte 0x02000000 -_0800FE8C: .4byte 0x000160cb -_0800FE90: .4byte gBattleTypeFlags -_0800FE94: .4byte gLinkPlayers -_0800FE98: - cmp r0, 0x2 - beq _0800FEB4 - cmp r0, 0x3 - bne _0800FEBC -_0800FEA0: - ldr r1, _0800FEAC @ =gEnemyParty - str r1, [sp, 0x4] - ldr r2, _0800FEB0 @ =gPlayerParty - str r2, [sp, 0x8] - b _0800FEBC - .align 2, 0 -_0800FEAC: .4byte gEnemyParty -_0800FEB0: .4byte gPlayerParty -_0800FEB4: - ldr r3, _08010008 @ =gPlayerParty - str r3, [sp, 0x4] - ldr r0, _0801000C @ =gEnemyParty - str r0, [sp, 0x8] -_0800FEBC: - movs r7, 0 - movs r1, 0 - mov r8, r1 - ldr r2, [sp] - lsls r2, 2 - str r2, [sp, 0xC] - movs r3, 0xCE - lsls r3, 1 - mov r10, r3 - mov r9, r1 -_0800FED0: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r0, [sp, 0x4] - adds r4, r0, r4 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - adds r1, r0, 0 - cmp r5, 0 - beq _0800FF40 - cmp r5, r10 - beq _0800FF14 - cmp r6, 0 - beq _0800FF14 - cmp r1, 0 - bne _0800FF14 - movs r0, 0x1 - mov r2, r9 - lsls r0, r2 - orrs r7, r0 -_0800FF14: - cmp r5, 0 - beq _0800FF40 - cmp r6, 0 - beq _0800FF2C - cmp r5, r10 - beq _0800FF24 - cmp r1, 0 - beq _0800FF2C -_0800FF24: - movs r0, 0x2 - mov r3, r9 - lsls r0, r3 - orrs r7, r0 -_0800FF2C: - cmp r5, 0 - beq _0800FF40 - cmp r5, r10 - beq _0800FF40 - cmp r6, 0 - bne _0800FF40 - movs r0, 0x3 - mov r1, r9 - lsls r0, r1 - orrs r7, r0 -_0800FF40: - movs r2, 0x2 - add r9, r2 - movs r3, 0x1 - add r8, r3 - mov r0, r8 - cmp r0, 0x5 - ble _0800FED0 - ldr r1, _08010010 @ =gTasks - ldr r2, [sp, 0xC] - ldr r3, [sp] - adds r0, r2, r3 - lsls r0, 3 - adds r0, r1 - strh r7, [r0, 0xE] - movs r7, 0 - movs r0, 0 - mov r8, r0 - movs r1, 0xCE - lsls r1, 1 - mov r10, r1 - mov r9, r0 -_0800FF6A: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r2, [sp, 0x8] - adds r4, r2, r4 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - adds r1, r0, 0 - cmp r5, 0 - beq _0800FFDA - cmp r5, r10 - beq _0800FFAE - cmp r6, 0 - beq _0800FFAE - cmp r1, 0 - bne _0800FFAE - movs r0, 0x1 - mov r3, r9 - lsls r0, r3 - orrs r7, r0 -_0800FFAE: - cmp r5, 0 - beq _0800FFDA - cmp r6, 0 - beq _0800FFC6 - cmp r5, r10 - beq _0800FFBE - cmp r1, 0 - beq _0800FFC6 -_0800FFBE: - movs r0, 0x2 - mov r1, r9 - lsls r0, r1 - orrs r7, r0 -_0800FFC6: - cmp r5, 0 - beq _0800FFDA - cmp r5, r10 - beq _0800FFDA - cmp r6, 0 - bne _0800FFDA - movs r0, 0x3 - mov r2, r9 - lsls r0, r2 - orrs r7, r0 -_0800FFDA: - movs r3, 0x2 - add r9, r3 - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0x5 - ble _0800FF6A - ldr r1, _08010010 @ =gTasks - ldr r2, [sp, 0xC] - ldr r3, [sp] - adds r0, r2, r3 - lsls r0, 3 - adds r0, r1 - strh r7, [r0, 0x10] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08010008: .4byte gPlayerParty -_0801000C: .4byte gEnemyParty -_08010010: .4byte gTasks - thumb_func_end sub_800FE40 - - thumb_func_start c2_8011A1C -c2_8011A1C: @ 8010014 - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r4, 0 - str r4, [sp] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _08010144 @ =0x05006000 - mov r0, sp - bl CpuSet - ldr r0, _08010148 @ =REG_MOSAIC - strh r4, [r0] - subs r0, 0xC - movs r2, 0xF0 - strh r2, [r0] - adds r0, 0x4 - ldr r3, _0801014C @ =0x00005051 - adds r1, r3, 0 - strh r1, [r0] - adds r0, 0x4 - strh r4, [r0] - adds r0, 0x2 - strh r4, [r0] - ldr r0, _08010150 @ =gUnknown_030042C4 - strh r2, [r0] - ldr r0, _08010154 @ =gUnknown_03004240 - strh r1, [r0] - bl dp12_8087EA4 - ldr r0, _08010158 @ =gUnknown_03004DE0 - movs r3, 0xF0 - movs r4, 0xF0 - lsls r4, 3 - adds r2, r0, r4 - movs r1, 0x4F -_08010066: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _08010066 - movs r1, 0x50 - ldr r5, _0801015C @ =gWindowConfig_81E6C58 - ldr r0, _08010158 @ =gUnknown_03004DE0 - ldr r3, _08010160 @ =0x0000ff10 - movs r4, 0x82 - lsls r4, 4 - adds r2, r0, r4 - adds r0, 0xA0 -_08010084: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - adds r1, 0x1 - cmp r1, 0x9F - ble _08010084 - adds r0, r5, 0 - bl SetUpWindowConfig - bl ResetPaletteFade - ldr r0, _08010164 @ =gUnknown_030042A4 - movs r4, 0 - strh r4, [r0] - ldr r0, _08010168 @ =gUnknown_030042A0 - strh r4, [r0] - ldr r0, _0801016C @ =gUnknown_030042C0 - strh r4, [r0] - ldr r0, _08010170 @ =gUnknown_030041B4 - strh r4, [r0] - ldr r0, _08010174 @ =gUnknown_03004288 - strh r4, [r0] - ldr r0, _08010178 @ =gUnknown_03004280 - strh r4, [r0] - ldr r0, _0801017C @ =gUnknown_030041B0 - strh r4, [r0] - ldr r0, _08010180 @ =gUnknown_030041B8 - strh r4, [r0] - ldr r0, _08010184 @ =gUnknown_03004210 - adds r1, r5, 0 - bl InitWindowFromConfig - ldr r0, _08010188 @ =gUnknown_030041D0 - ldr r1, _0801018C @ =gWindowConfig_81E71D0 - bl InitWindowFromConfig - ldr r0, _08010190 @ =gUnknown_03004250 - ldr r1, _08010194 @ =gWindowConfig_81E71EC - bl InitWindowFromConfig - bl sub_800D6D4 - ldr r0, _08010198 @ =gUnknown_08D004E0 - movs r1, 0 - movs r2, 0x40 - bl LoadCompressedPalette - bl sub_800D74C - bl ResetSpriteData - bl ResetTasks - bl sub_800E23C - ldr r1, _0801019C @ =REG_WINOUT - movs r0, 0x37 - strh r0, [r1] - bl FreeAllSpritePalettes - ldr r1, _080101A0 @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _080101A4 @ =sub_800FCFC - bl SetVBlankCallback - ldr r0, _080101A8 @ =sub_800DE30 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080101AC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x87 - lsls r2, 1 - strh r2, [r1, 0xA] - movs r2, 0x5A - strh r2, [r1, 0xC] - movs r2, 0x1 - strh r2, [r1, 0x12] - bl sub_800FE40 - ldr r0, _080101B0 @ =sub_80101B8 - bl SetMainCallback2 - ldr r0, _080101B4 @ =gUnknown_02024D1E - strb r4, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08010144: .4byte 0x05006000 -_08010148: .4byte REG_MOSAIC -_0801014C: .4byte 0x00005051 -_08010150: .4byte gUnknown_030042C4 -_08010154: .4byte gUnknown_03004240 -_08010158: .4byte gUnknown_03004DE0 -_0801015C: .4byte gWindowConfig_81E6C58 -_08010160: .4byte 0x0000ff10 -_08010164: .4byte gUnknown_030042A4 -_08010168: .4byte gUnknown_030042A0 -_0801016C: .4byte gUnknown_030042C0 -_08010170: .4byte gUnknown_030041B4 -_08010174: .4byte gUnknown_03004288 -_08010178: .4byte gUnknown_03004280 -_0801017C: .4byte gUnknown_030041B0 -_08010180: .4byte gUnknown_030041B8 -_08010184: .4byte gUnknown_03004210 -_08010188: .4byte gUnknown_030041D0 -_0801018C: .4byte gWindowConfig_81E71D0 -_08010190: .4byte gUnknown_03004250 -_08010194: .4byte gWindowConfig_81E71EC -_08010198: .4byte gUnknown_08D004E0 -_0801019C: .4byte REG_WINOUT -_080101A0: .4byte gReservedSpritePaletteCount -_080101A4: .4byte sub_800FCFC -_080101A8: .4byte sub_800DE30 -_080101AC: .4byte gTasks -_080101B0: .4byte sub_80101B8 -_080101B4: .4byte gUnknown_02024D1E - thumb_func_end c2_8011A1C - - thumb_func_start sub_80101B8 -sub_80101B8: @ 80101B8 - push {lr} - bl c2_081284E0 - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - bl RunTasks - pop {r0} - bx r0 - thumb_func_end sub_80101B8 - - thumb_func_start c2_081284E0 -c2_081284E0: @ 80101D4 - push {r4,lr} - sub sp, 0x4 - ldr r4, _080101EC @ =gUnknown_02024D1E - ldrb r0, [r4] - cmp r0, 0x1 - beq _080101FC - cmp r0, 0x1 - bgt _080101F0 - cmp r0, 0 - beq _080101F6 - b _08010236 - .align 2, 0 -_080101EC: .4byte gUnknown_02024D1E -_080101F0: - cmp r0, 0x2 - beq _08010222 - b _08010236 -_080101F6: - movs r0, 0xFF - strb r0, [r4, 0x1] - b _0801021A -_080101FC: - ldrb r0, [r4, 0x1] - subs r0, 0x1 - strb r0, [r4, 0x1] - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08010236 - movs r0, 0x1 - negs r0, r0 - str r1, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_0801021A: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08010236 -_08010222: - ldr r0, _08010240 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08010236 - ldr r0, _08010244 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_08010236: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08010240: .4byte gPaletteFade -_08010244: .4byte gMain - thumb_func_end c2_081284E0 - - thumb_func_start oac_poke_opponent -oac_poke_opponent: @ 8010248 - push {lr} - sub sp, 0x4 - ldr r1, _08010270 @ =sub_8010278 - str r1, [r0, 0x1C] - movs r1, 0 - bl StartSpriteAnimIfDifferent - movs r0, 0x80 - lsls r0, 10 - ldr r1, _08010274 @ =0x00003def - str r1, [sp] - movs r1, 0 - movs r2, 0xA - movs r3, 0xA - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08010270: .4byte sub_8010278 -_08010274: .4byte 0x00003def - thumb_func_end oac_poke_opponent - - thumb_func_start sub_8010278 -sub_8010278: @ 8010278 - push {lr} - adds r2, r0, 0 - ldr r0, _080102A4 @ =gUnknown_02024DE8 - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080102A0 - ldrh r0, [r2, 0x24] - adds r0, 0x2 - strh r0, [r2, 0x24] - lsls r0, 16 - cmp r0, 0 - bne _080102A0 - ldr r0, _080102A8 @ =sub_80102AC - str r0, [r2, 0x1C] - ldrh r0, [r2, 0x32] - movs r1, 0x19 - bl PlayCry1 -_080102A0: - pop {r0} - bx r0 - .align 2, 0 -_080102A4: .4byte gUnknown_02024DE8 -_080102A8: .4byte sub_80102AC - thumb_func_end sub_8010278 - - thumb_func_start sub_80102AC -sub_80102AC: @ 80102AC - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080102F4 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - bl sub_804777C - ldr r1, _080102FC @ =gUnknown_03004340 - movs r2, 0x2E - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r0, [r0] - bl sub_8043DFC - ldr r0, _08010300 @ =nullsub_37 - str r0, [r4, 0x1C] - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnimIfDifferent - movs r0, 0x80 - lsls r0, 10 - ldr r1, _08010304 @ =0x00003def - str r1, [sp] - movs r1, 0 - movs r2, 0xA - movs r3, 0 - bl BeginNormalPaletteFade -_080102F4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080102FC: .4byte gUnknown_03004340 -_08010300: .4byte nullsub_37 -_08010304: .4byte 0x00003def - thumb_func_end sub_80102AC - - thumb_func_start nullsub_37 -nullsub_37: @ 8010308 - bx lr - thumb_func_end nullsub_37 - - thumb_func_start unref_sub_801030C -unref_sub_801030C: @ 801030C - movs r1, 0x6 - strh r1, [r0, 0x34] - movs r1, 0x1 - strh r1, [r0, 0x36] - ldr r1, _0801031C @ =sub_8010320 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_0801031C: .4byte sub_8010320 - thumb_func_end unref_sub_801030C - - thumb_func_start sub_8010320 -sub_8010320: @ 8010320 - push {r4,lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x36] - subs r0, 0x1 - strh r0, [r3, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _08010374 - movs r0, 0x8 - strh r0, [r3, 0x36] - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r4, 0x5 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x34] - subs r0, 0x1 - strh r0, [r3, 0x34] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _08010374 - ldrb r1, [r1] - adds r0, r4, 0 - ands r0, r1 - mov r1, r12 - strb r0, [r1] - ldr r0, _0801037C @ =nullsub_37 - str r0, [r3, 0x1C] - ldr r0, _08010380 @ =gUnknown_03004284 - str r2, [r0] -_08010374: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801037C: .4byte nullsub_37 -_08010380: .4byte gUnknown_03004284 - thumb_func_end sub_8010320 - - thumb_func_start sub_8010384 -sub_8010384: @ 8010384 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r9, r0 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, r6, 2 - ldr r0, _080103A4 @ =0x02017800 - adds r1, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - beq _080103A8 - adds r4, r0, 0 - b _080103AC - .align 2, 0 -_080103A4: .4byte 0x02017800 -_080103A8: - mov r0, r9 - ldrh r4, [r0, 0x32] -_080103AC: - ldr r1, _08010414 @ =gUnknown_02024A6A - lsls r0, r6, 1 - adds r5, r0, r1 - ldrh r0, [r5] - movs r1, 0x64 - mov r8, r1 - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - ldr r7, _08010418 @ =gEnemyParty - adds r0, r7 - movs r1, 0 - bl GetMonData - cmp r4, SPECIES_UNOWN - bne _08010430 - ldrh r0, [r5] - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - adds r0, r7 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0801041C - movs r0, SPECIES_UNOWN - b _08010426 - .align 2, 0 -_08010414: .4byte gUnknown_02024A6A -_08010418: .4byte gEnemyParty -_0801041C: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_08010426: - ldr r1, _0801042C @ =gMonFrontPicCoords - lsls r0, 2 - b _08010468 - .align 2, 0 -_0801042C: .4byte gMonFrontPicCoords -_08010430: - ldr r0, _08010448 @ =SPECIES_CASTFORM - cmp r4, r0 @ Check if pokemon species is Castform - bne _08010454 - ldr r0, _0801044C @ =gUnknownCastformCoords_0837F598 - ldr r1, _08010450 @ =gBattleMonForms - adds r1, r6, r1 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - b _0801046C - .align 2, 0 -_08010448: .4byte SPECIES_CASTFORM -_0801044C: .4byte gUnknownCastformCoords_0837F598 -_08010450: .4byte gBattleMonForms -_08010454: - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08010464 - ldr r0, _08010460 @ =gMonFrontPicCoords - b _0801046A - .align 2, 0 -_08010460: .4byte gMonFrontPicCoords -_08010464: - ldr r1, _0801048C @ =gMonFrontPicCoords - lsls r0, r4, 2 -_08010468: - adds r0, r1 -_0801046A: - ldrb r0, [r0, 0x1] -_0801046C: - lsrs r1, r0, 3 - movs r0, 0x8 - subs r0, r1 - mov r1, r9 - strh r0, [r1, 0x34] - movs r0, 0x1 - strh r0, [r1, 0x36] - ldr r0, _08010490 @ =sub_8010494 - str r0, [r1, 0x1C] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801048C: .4byte gMonFrontPicCoords -_08010490: .4byte sub_8010494 - thumb_func_end sub_8010384 - - thumb_func_start sub_8010494 -sub_8010494: @ 8010494 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x36] - subs r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _08010510 - movs r0, 0x2 - strh r0, [r4, 0x36] - ldrh r0, [r4, 0x26] - adds r0, 0x8 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - cmp r0, 0 - bge _080104C8 - adds r0, r4, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl DestroySprite - b _08010510 -_080104C8: - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - bl battle_get_per_side_status - ldr r1, _08010518 @ =gUnknown_081FAF4C - lsls r0, 24 - lsrs r0, 22 - adds r0, r1 - ldr r2, _0801051C @ =gBattleMonForms - movs r3, 0x2E - ldrsh r1, [r4, r3] - adds r1, r2 - ldrb r1, [r1] - lsls r1, 11 - ldr r2, [r0] - adds r2, r1 - movs r1, 0x34 - ldrsh r0, [r4, r1] - lsls r0, 8 - adds r2, r0 - movs r1, 0 - movs r0, 0xFF -_080104F6: - strb r1, [r2] - adds r2, 0x1 - subs r0, 0x1 - cmp r0, 0 - bge _080104F6 - ldr r0, _0801051C @ =gBattleMonForms - movs r2, 0x2E - ldrsh r1, [r4, r2] - adds r1, r0 - ldrb r1, [r1] - adds r0, r4, 0 - bl StartSpriteAnim -_08010510: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08010518: .4byte gUnknown_081FAF4C -_0801051C: .4byte gBattleMonForms - thumb_func_end sub_8010494 - - thumb_func_start sub_8010520 -sub_8010520: @ 8010520 - movs r1, 0x8 - strh r1, [r0, 0x34] - adds r1, r0, 0 - adds r1, 0x3E - ldrb r1, [r1] - lsls r1, 29 - lsrs r1, 31 - strh r1, [r0, 0x36] - ldr r1, _08010538 @ =sub_801053C - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_08010538: .4byte sub_801053C - thumb_func_end sub_8010520 - - thumb_func_start sub_801053C -sub_801053C: @ 801053C - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x34] - subs r0, 0x1 - strh r0, [r3, 0x34] - lsls r0, 16 - cmp r0, 0 - bne _0801056E - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - movs r0, 0x8 - strh r0, [r3, 0x34] -_0801056E: - pop {r0} - bx r0 - thumb_func_end sub_801053C - - thumb_func_start sub_8010574 -sub_8010574: @ 8010574 - movs r1, 0x3E - adds r1, r0 - mov r12, r1 - movs r1, 0x1 - ldrh r2, [r0, 0x36] - ands r2, r1 - lsls r2, 2 - mov r1, r12 - ldrb r3, [r1] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r2 - mov r2, r12 - strb r1, [r2] - movs r1, 0 - strh r1, [r0, 0x36] - ldr r1, _0801059C @ =nullsub_37 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_0801059C: .4byte nullsub_37 - thumb_func_end sub_8010574 - - thumb_func_start sub_80105A0 -sub_80105A0: @ 80105A0 - ldr r1, _080105A8 @ =oac_poke_ally_ - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080105A8: .4byte oac_poke_ally_ - thumb_func_end sub_80105A0 - - thumb_func_start oac_poke_ally_ -oac_poke_ally_: @ 80105AC - push {lr} - adds r2, r0, 0 - ldr r0, _080105D4 @ =gUnknown_02024DE8 - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080105D0 - ldrh r0, [r2, 0x24] - subs r0, 0x2 - strh r0, [r2, 0x24] - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0 - bne _080105D0 - ldr r0, _080105D8 @ =nullsub_86 - str r0, [r2, 0x1C] - strh r1, [r2, 0x30] -_080105D0: - pop {r0} - bx r0 - .align 2, 0 -_080105D4: .4byte gUnknown_02024DE8 -_080105D8: .4byte nullsub_86 - thumb_func_end oac_poke_ally_ - - thumb_func_start sub_80105DC -sub_80105DC: @ 80105DC - ldr r1, _080105E4 @ =nullsub_86 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080105E4: .4byte nullsub_86 - thumb_func_end sub_80105DC - - thumb_func_start nullsub_86 -nullsub_86: @ 80105E8 - bx lr - thumb_func_end nullsub_86 - - thumb_func_start sub_80105EC -sub_80105EC: @ 80105EC - push {lr} - adds r2, r0, 0 - ldr r0, _08010610 @ =gUnknown_02024DE8 - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0801060C - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x26] - adds r0, r1 - strh r0, [r2, 0x26] -_0801060C: - pop {r0} - bx r0 - .align 2, 0 -_08010610: .4byte gUnknown_02024DE8 - thumb_func_end sub_80105EC - - thumb_func_start dp11b_obj_instanciate -dp11b_obj_instanciate: @ 8010614 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - cmp r1, 0 - beq _0801064C - lsls r2, r4, 1 - adds r0, r2, r4 - lsls r0, 2 - ldr r1, _08010648 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - b _0801065A - .align 2, 0 -_08010648: .4byte 0x02017810 -_0801064C: - lsls r2, r4, 1 - adds r0, r2, r4 - lsls r0, 2 - ldr r1, _08010698 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 -_0801065A: - ands r0, r1 - adds r6, r2, 0 - cmp r0, 0 - bne _080106FA - ldr r0, _0801069C @ =objc_dp11b_pingpong - bl CreateInvisibleSpriteWithCallback - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, r8 - cmp r0, 0x1 - bne _080106A8 - ldr r0, _080106A0 @ =gUnknown_03004340 - adds r0, r4, r0 - ldrb r7, [r0] - adds r0, r6, r4 - lsls r0, 2 - ldr r1, _08010698 @ =0x02017810 - adds r0, r1 - strb r5, [r0, 0x2] - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] - ldr r2, _080106A4 @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0x80 - b _080106CC - .align 2, 0 -_08010698: .4byte 0x02017810 -_0801069C: .4byte objc_dp11b_pingpong -_080106A0: .4byte gUnknown_03004340 -_080106A4: .4byte gSprites -_080106A8: - ldr r0, _08010708 @ =gUnknown_02024BE0 - adds r0, r4, r0 - ldrb r7, [r0] - adds r0, r6, r4 - lsls r0, 2 - ldr r1, _0801070C @ =0x02017810 - adds r0, r1 - strb r5, [r0, 0x3] - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldr r2, _08010710 @ =gSprites - lsls r3, r5, 4 - adds r0, r3, r5 - lsls r0, 2 - adds r0, r2 - movs r1, 0xC0 -_080106CC: - strh r1, [r0, 0x2E] - adds r4, r2, 0 - adds r1, r3, r5 - lsls r1, 2 - adds r1, r4 - mov r2, r9 - lsls r0, r2, 24 - asrs r0, 24 - movs r2, 0 - strh r0, [r1, 0x30] - mov r3, r10 - lsls r0, r3, 24 - asrs r0, 24 - strh r0, [r1, 0x32] - strh r7, [r1, 0x34] - mov r0, r8 - strh r0, [r1, 0x36] - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - adds r0, r4 - strh r2, [r0, 0x24] - strh r2, [r0, 0x26] -_080106FA: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08010708: .4byte gUnknown_02024BE0 -_0801070C: .4byte 0x02017810 -_08010710: .4byte gSprites - thumb_func_end dp11b_obj_instanciate - - thumb_func_start dp11b_obj_free -dp11b_obj_free: @ 8010714 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - bne _0801075C - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _08010754 @ =0x02017810 - adds r5, r0, r1 - ldrb r1, [r5] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080107A0 - ldr r2, _08010758 @ =gSprites - ldrb r1, [r5, 0x2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x34] - lsls r1, 24 - lsrs r4, r1, 24 - bl DestroySprite - ldrb r1, [r5] - movs r0, 0x3 - negs r0, r0 - b _0801078C - .align 2, 0 -_08010754: .4byte 0x02017810 -_08010758: .4byte gSprites -_0801075C: - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _080107A8 @ =0x02017810 - adds r5, r0, r1 - ldrb r1, [r5] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080107A0 - ldr r2, _080107AC @ =gSprites - ldrb r1, [r5, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x34] - lsls r1, 24 - lsrs r4, r1, 24 - bl DestroySprite - ldrb r1, [r5] - movs r0, 0x5 - negs r0, r0 -_0801078C: - ands r0, r1 - strb r0, [r5] - ldr r0, _080107AC @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x24] - strh r0, [r1, 0x26] -_080107A0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080107A8: .4byte 0x02017810 -_080107AC: .4byte gSprites - thumb_func_end dp11b_obj_free - - thumb_func_start objc_dp11b_pingpong -objc_dp11b_pingpong: @ 80107B0 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x34] - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x36 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080107C8 - movs r2, 0x2E - ldrsh r0, [r4, r2] - b _080107CC -_080107C8: - movs r1, 0x2E - ldrsh r0, [r4, r1] -_080107CC: - movs r2, 0x32 - ldrsh r1, [r4, r2] - bl Sin - ldr r2, _080107F8 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r2 - ldrh r2, [r4, 0x32] - adds r0, r2 - strh r0, [r1, 0x26] - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x2E] - adds r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080107F8: .4byte gSprites - thumb_func_end objc_dp11b_pingpong - - thumb_func_start nullsub_41 -nullsub_41: @ 80107FC - bx lr - thumb_func_end nullsub_41 - - thumb_func_start sub_8010800 -sub_8010800: @ 8010800 - push {lr} - bl sub_8010874 - ldr r1, _08010818 @ =gUnknown_02024D1E - movs r0, 0 - strb r0, [r1, 0x1] - ldr r1, _0801081C @ =gUnknown_030042D4 - ldr r0, _08010820 @ =bc_8012FAC - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08010818: .4byte gUnknown_02024D1E -_0801081C: .4byte gUnknown_030042D4 -_08010820: .4byte bc_8012FAC - thumb_func_end sub_8010800 - - thumb_func_start sub_8010824 -sub_8010824: @ 8010824 - push {r4,r5,lr} - ldr r0, _08010864 @ =gUnknown_030042D4 - ldr r0, [r0] - bl _call_via_r0 - ldr r1, _08010868 @ =gUnknown_02024A60 - movs r0, 0 - strb r0, [r1] - ldr r0, _0801086C @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r0, 0 - beq _0801085E - ldr r5, _08010870 @ =gUnknown_03004330 - adds r4, r1, 0 -_08010840: - ldrb r0, [r4] - lsls r0, 2 - adds r0, r5 - ldr r0, [r0] - bl _call_via_r0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _0801086C @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08010840 -_0801085E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08010864: .4byte gUnknown_030042D4 -_08010868: .4byte gUnknown_02024A60 -_0801086C: .4byte gUnknown_02024A68 -_08010870: .4byte gUnknown_03004330 - thumb_func_end sub_8010824 - - thumb_func_start sub_8010874 -sub_8010874: @ 8010874 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - bl sub_801365C - bl sub_801377C - movs r2, 0 - movs r3, 0 - ldr r0, _08010AC8 @ =gUnknown_02024C4C - mov r10, r0 - ldr r1, _08010ACC @ =gUnknown_02024C44 - mov r9, r1 - ldr r4, _08010AD0 @ =gUnknown_02024C3C - mov r8, r4 - ldr r0, _08010AD4 @ =gUnknown_02024C34 - mov r12, r0 - ldr r4, _08010AD8 @ =gUnknown_02024CA8 - movs r5, 0 - ldr r7, _08010ADC @ =gUnknown_02024C2C - ldr r6, _08010AE0 @ =gUnknown_02024C54 -_080108A4: - ldr r0, _08010AE4 @ =gUnknown_02024C98 - adds r0, r5, r0 - str r3, [r0] - movs r1, 0 -_080108AC: - adds r0, r4, r1 - strb r3, [r0] - adds r1, 0x1 - cmp r1, 0x1B - bls _080108AC - movs r0, 0x2 - strb r0, [r4, 0x16] - ldr r1, _08010AE8 @ =gUnknown_02024C70 - adds r0, r2, r1 - strb r3, [r0] - mov r0, r12 - strh r3, [r0] - mov r1, r8 - strh r3, [r1] - mov r0, r9 - strh r3, [r0] - mov r1, r10 - strh r3, [r1] - ldr r0, _08010AEC @ =gUnknown_02024C5C - adds r1, r2, r0 - movs r0, 0xFF - strb r0, [r1] - strh r3, [r6] - strh r3, [r7] - ldr r1, _08010AF0 @ =0x02017100 - adds r0, r5, r1 - str r3, [r0] - movs r0, 0x2 - add r10, r0 - add r9, r0 - add r8, r0 - add r12, r0 - adds r4, 0x1C - adds r5, 0x4 - adds r7, 0x2 - adds r6, 0x2 - adds r2, 0x1 - cmp r2, 0x3 - ble _080108A4 - movs r5, 0 - ldr r3, _08010AF4 @ =gUnknown_02024C80 - ldr r4, _08010AF8 @ =gUnknown_02024C7A - movs r2, 0x1 -_08010902: - strh r5, [r4] - movs r1, 0 -_08010906: - adds r0, r3, r1 - strb r5, [r0] - adds r1, 0x1 - cmp r1, 0xB - bls _08010906 - adds r3, 0xC - adds r4, 0x2 - subs r2, 0x1 - cmp r2, 0 - bge _08010902 - movs r1, 0 - ldr r2, _08010AFC @ =gPlayerMonIndex - strb r1, [r2] - ldr r3, _08010B00 @ =gEnemyMonIndex - strb r1, [r3] - ldr r4, _08010B04 @ =gBattleWeather - strh r1, [r4] - ldr r1, _08010B08 @ =gUnknown_02024DBC - movs r2, 0 - movs r3, 0 -_0801092E: - adds r0, r1, r2 - strb r3, [r0] - adds r2, 0x1 - cmp r2, 0x2B - bls _0801092E - movs r0, 0 - ldr r1, _08010B0C @ =gUnknown_02024C6C - str r0, [r1] - ldr r2, _08010B10 @ =gBattleTypeFlags - ldrh r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0801095C - ldr r3, _08010B14 @ =gSaveBlock2 - ldrb r1, [r3, 0x15] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0801095C - movs r0, 0x80 - ldr r4, _08010B0C @ =gUnknown_02024C6C - str r0, [r4] -_0801095C: - ldr r1, _08010B14 @ =gSaveBlock2 - ldrb r0, [r1, 0x15] - lsls r0, 30 - lsrs r0, 31 - ldr r3, _08010B18 @ =0x02000000 - ldr r4, _08010B1C @ =0x00016084 - adds r2, r3, r4 - movs r1, 0 - strb r0, [r2] - ldr r0, _08010B20 @ =gUnknown_02024C0E - strb r1, [r0] - ldr r2, _08010B24 @ =gUnknown_02024D26 - strb r1, [r2] - ldr r3, _08010B28 @ =gUnknown_02024A64 - str r1, [r3] - movs r2, 0 - ldr r4, _08010B2C @ =gUnknown_02024D1A - strh r1, [r4] - ldr r1, _08010B18 @ =0x02000000 - ldr r3, _08010B30 @ =0x00017130 - adds r0, r1, r3 - strb r2, [r0] - ldr r4, _08010B34 @ =0x00017160 - adds r0, r1, r4 - strb r2, [r0] - ldr r1, _08010B38 @ =gUnknown_02024D1E - movs r2, 0 - adds r0, r1, 0x7 -_08010994: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08010994 - movs r5, 0 - ldr r0, _08010B3C @ =gUnknown_02024D18 - strh r5, [r0] - movs r0, 0 - ldr r1, _08010B40 @ =gBattleMoveDamage - str r0, [r1] - ldr r2, _08010B44 @ =gUnknown_02024DE8 - strh r0, [r2] - ldr r4, _08010B18 @ =0x02000000 - ldr r3, _08010B48 @ =0x00016002 - adds r0, r4, r3 - strb r5, [r0] - ldr r1, _08010B4C @ =0x000160a1 - adds r0, r4, r1 - strb r5, [r0] - ldr r2, _08010B50 @ =gUnknown_03004324 - strb r5, [r2] - ldr r3, _08010B54 @ =gUnknown_02024C0C - strb r5, [r3] - subs r1, 0x29 - adds r0, r4, r1 - strb r5, [r0] - ldr r2, _08010B58 @ =0x00016086 - adds r0, r4, r2 - strb r5, [r0] - ldr r3, _08010B5C @ =0x00016087 - adds r0, r4, r3 - strb r5, [r0] - ldr r0, _08010B60 @ =gEnemyParty - movs r1, 0xB - bl GetMonData - ldr r2, _08010B64 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x8] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08010B68 @ =0x000004fb - bl __divsi3 - ldr r2, _08010B6C @ =0x00016089 - adds r1, r4, r2 - strb r0, [r1] - ldr r3, _08010B70 @ =0x00016088 - adds r1, r4, r3 - movs r0, 0x3 - strb r0, [r1] - ldr r1, _08010B74 @ =0x0001601b - adds r0, r4, r1 - strb r5, [r0] - subs r2, 0x33 - adds r1, r4, r2 - movs r0, 0x1 - strb r0, [r1] - movs r2, 0 - movs r1, 0 -_08010A12: - ldr r3, _08010B78 @ =0x000160ac - adds r0, r2, r3 - adds r0, r4 - strb r1, [r0] - adds r3, 0x20 - adds r0, r2, r3 - adds r0, r4 - strb r1, [r0] - adds r3, 0x1C - adds r0, r2, r3 - adds r0, r4 - strb r1, [r0] - adds r3, 0x8 - adds r0, r2, r3 - adds r0, r4 - strb r1, [r0] - adds r3, 0x10 - adds r0, r2, r3 - adds r0, r4 - strb r1, [r0] - adds r3, 0x8 - adds r0, r2, r3 - adds r0, r4 - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x7 - ble _08010A12 - ldr r4, _08010B18 @ =0x02000000 - ldr r1, _08010B7C @ =0x000160c8 - adds r0, r4, r1 - movs r2, 0 - movs r1, 0x6 - strb r1, [r0] - subs r3, 0x3F - adds r0, r4, r3 - strb r1, [r0] - ldr r1, _08010B80 @ =0x00016113 - adds r0, r4, r1 - strb r2, [r0] - ldr r3, _08010B84 @ =gUnknown_030042E0 - movs r1, 0 - movs r2, 0xA - adds r0, r3, 0 - adds r0, 0x40 -_08010A6A: - strb r1, [r0] - subs r0, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _08010A6A - movs r1, 0 - strb r1, [r3, 0x13] - strb r1, [r3] - strb r1, [r3, 0x1] - strb r1, [r3, 0x2] - strb r1, [r3, 0x3] - strb r1, [r3, 0x4] - ldrb r2, [r3, 0x5] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - movs r2, 0x3 - negs r2, r2 - ands r0, r2 - strb r0, [r3, 0x5] - strh r1, [r3, 0x20] - strh r1, [r3, 0x22] - strh r1, [r3, 0x24] - strh r1, [r3, 0x6] - strh r1, [r3, 0x26] - strh r1, [r3, 0x28] - movs r2, 0 - adds r5, r3, 0 - adds r5, 0x8 - movs r4, 0 - adds r1, r3, 0 - adds r1, 0x14 -_08010AAA: - adds r0, r2, r5 - strb r4, [r0] - strb r4, [r1] - strb r4, [r1, 0x16] - adds r1, 0x1 - adds r2, 0x1 - cmp r2, 0x9 - ble _08010AAA - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08010AC8: .4byte gUnknown_02024C4C -_08010ACC: .4byte gUnknown_02024C44 -_08010AD0: .4byte gUnknown_02024C3C -_08010AD4: .4byte gUnknown_02024C34 -_08010AD8: .4byte gUnknown_02024CA8 -_08010ADC: .4byte gUnknown_02024C2C -_08010AE0: .4byte gUnknown_02024C54 -_08010AE4: .4byte gUnknown_02024C98 -_08010AE8: .4byte gUnknown_02024C70 -_08010AEC: .4byte gUnknown_02024C5C -_08010AF0: .4byte 0x02017100 -_08010AF4: .4byte gUnknown_02024C80 -_08010AF8: .4byte gUnknown_02024C7A -_08010AFC: .4byte gPlayerMonIndex -_08010B00: .4byte gEnemyMonIndex -_08010B04: .4byte gBattleWeather -_08010B08: .4byte gUnknown_02024DBC -_08010B0C: .4byte gUnknown_02024C6C -_08010B10: .4byte gBattleTypeFlags -_08010B14: .4byte gSaveBlock2 -_08010B18: .4byte 0x02000000 -_08010B1C: .4byte 0x00016084 -_08010B20: .4byte gUnknown_02024C0E -_08010B24: .4byte gUnknown_02024D26 -_08010B28: .4byte gUnknown_02024A64 -_08010B2C: .4byte gUnknown_02024D1A -_08010B30: .4byte 0x00017130 -_08010B34: .4byte 0x00017160 -_08010B38: .4byte gUnknown_02024D1E -_08010B3C: .4byte gUnknown_02024D18 -_08010B40: .4byte gBattleMoveDamage -_08010B44: .4byte gUnknown_02024DE8 -_08010B48: .4byte 0x00016002 -_08010B4C: .4byte 0x000160a1 -_08010B50: .4byte gUnknown_03004324 -_08010B54: .4byte gUnknown_02024C0C -_08010B58: .4byte 0x00016086 -_08010B5C: .4byte 0x00016087 -_08010B60: .4byte gEnemyParty -_08010B64: .4byte gBaseStats -_08010B68: .4byte 0x000004fb -_08010B6C: .4byte 0x00016089 -_08010B70: .4byte 0x00016088 -_08010B74: .4byte 0x0001601b -_08010B78: .4byte 0x000160ac -_08010B7C: .4byte 0x000160c8 -_08010B80: .4byte 0x00016113 -_08010B84: .4byte gUnknown_030042E0 - thumb_func_end sub_8010874 - - thumb_func_start sub_8010B88 -sub_8010B88: @ 8010B88 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - ldr r4, _08010CEC @ =gUnknown_02024CA8 - ldr r5, _08010CF0 @ =gUnknown_02024A60 - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r1, sp - adds r0, r4 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldr r0, [r0] - str r0, [r1] - ldr r2, _08010CF4 @ =gBattleMoves - ldr r3, _08010CF8 @ =gUnknown_02024BE6 - ldrh r1, [r3] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - mov r10, r4 - adds r7, r5, 0 - ldr r1, _08010CFC @ =gBattleMons - mov r8, r1 - ldr r2, _08010D00 @ =gUnknown_02024C98 - mov r12, r2 - cmp r0, 0x7F - beq _08010C66 - movs r5, 0 - adds r4, r7, 0 - movs r3, 0x58 - mov r2, r8 - adds r2, 0x18 - movs r1, 0x6 -_08010BDC: - ldrb r0, [r4] - muls r0, r3 - adds r0, r5, r0 - adds r0, r2 - strb r1, [r0] - adds r5, 0x1 - cmp r5, 0x7 - ble _08010BDC - movs r5, 0 - ldr r3, _08010D04 @ =gUnknown_02024A68 - ldrb r3, [r3] - cmp r5, r3 - bge _08010C52 - ldr r6, _08010D08 @ =gUnknown_02024AD0 - mov r9, r6 - ldr r3, _08010CEC @ =gUnknown_02024CA8 - ldr r4, _08010D00 @ =gUnknown_02024C98 -_08010BFE: - movs r0, 0x58 - muls r0, r5 - add r0, r9 - str r0, [sp, 0x20] - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 19 - ands r0, r1 - cmp r0, 0 - beq _08010C24 - ldrb r0, [r3, 0x14] - ldr r2, _08010CF0 @ =gUnknown_02024A60 - ldrb r2, [r2] - cmp r0, r2 - bne _08010C24 - ldr r0, _08010D0C @ =0xfbffffff - ands r1, r0 - ldr r6, [sp, 0x20] - str r1, [r6] -_08010C24: - ldr r1, [r4] - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - beq _08010C44 - ldrb r0, [r3, 0x15] - ldr r2, _08010CF0 @ =gUnknown_02024A60 - ldrb r2, [r2] - cmp r0, r2 - bne _08010C44 - movs r0, 0x19 - negs r0, r0 - ands r1, r0 - str r1, [r4] - movs r0, 0 - strb r0, [r3, 0x15] -_08010C44: - adds r3, 0x1C - adds r4, 0x4 - adds r5, 0x1 - ldr r6, _08010D04 @ =gUnknown_02024A68 - ldrb r6, [r6] - cmp r5, r6 - blt _08010BFE -_08010C52: - ldr r1, _08010CF8 @ =gUnknown_02024BE6 - ldrh r0, [r1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r2, _08010CF4 @ =gBattleMoves - adds r1, r2 - ldrb r0, [r1] - cmp r0, 0x7F - bne _08010D18 -_08010C66: - ldrb r1, [r7] - movs r0, 0x58 - adds r2, r1, 0 - muls r2, r0 - mov r0, r8 - adds r0, 0x50 - adds r2, r0 - ldr r0, [r2] - ldr r1, _08010D10 @ =0x15100007 - ands r0, r1 - str r0, [r2] - ldrb r1, [r7] - lsls r1, 2 - add r1, r12 - ldr r0, [r1] - ldr r2, _08010D14 @ =0x0003043f - ands r0, r2 - str r0, [r1] - movs r5, 0 - ldr r3, _08010D04 @ =gUnknown_02024A68 - ldrb r3, [r3] - cmp r5, r3 - bge _08010D30 - movs r6, 0 -_08010C96: - ldrb r0, [r7] - bl battle_side_get_owner - adds r4, r0, 0 - lsls r0, r5, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _08010CD6 - ldr r1, _08010D00 @ =gUnknown_02024C98 - lsls r0, r5, 2 - adds r2, r0, r1 - ldr r1, [r2] - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - beq _08010CD6 - ldr r0, _08010CEC @ =gUnknown_02024CA8 - adds r0, r6, r0 - ldrb r0, [r0, 0x15] - ldrb r3, [r7] - cmp r0, r3 - bne _08010CD6 - movs r0, 0x19 - negs r0, r0 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - str r1, [r2] -_08010CD6: - adds r6, 0x1C - adds r5, 0x1 - ldr r0, _08010D04 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r5, r0 - blt _08010C96 - ldr r6, _08010CEC @ =gUnknown_02024CA8 - mov r10, r6 - ldr r7, _08010CF0 @ =gUnknown_02024A60 - b _08010D30 - .align 2, 0 -_08010CEC: .4byte gUnknown_02024CA8 -_08010CF0: .4byte gUnknown_02024A60 -_08010CF4: .4byte gBattleMoves -_08010CF8: .4byte gUnknown_02024BE6 -_08010CFC: .4byte gBattleMons -_08010D00: .4byte gUnknown_02024C98 -_08010D04: .4byte gUnknown_02024A68 -_08010D08: .4byte gUnknown_02024AD0 -_08010D0C: .4byte 0xfbffffff -_08010D10: .4byte 0x15100007 -_08010D14: .4byte 0x0003043f -_08010D18: - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - mov r1, r8 - adds r1, 0x50 - adds r0, r1 - movs r1, 0 - str r1, [r0] - ldrb r0, [r7] - lsls r0, 2 - add r0, r12 - str r1, [r0] -_08010D30: - movs r5, 0 - ldr r6, _08010EFC @ =0x02000000 - ldr r0, _08010F00 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r5, r0 - bge _08010D92 - ldr r1, _08010F04 @ =gUnknown_02024AD0 - mov r9, r1 - ldr r2, _08010F08 @ =gBitTable - mov r8, r2 - ldr r4, _08010F0C @ =gUnknown_02024A60 - mov r12, r6 -_08010D48: - movs r0, 0x58 - muls r0, r5 - mov r1, r9 - adds r3, r0, r1 - ldrb r0, [r4] - lsls r0, 2 - add r0, r8 - ldr r0, [r0] - lsls r2, r0, 16 - ldr r1, [r3] - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _08010D68 - bics r1, r2 - str r1, [r3] -_08010D68: - ldr r1, [r3] - movs r0, 0xE0 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08010D88 - ldr r2, _08010F10 @ =0x00016020 - adds r0, r5, r2 - add r0, r12 - ldrb r0, [r0] - ldrb r2, [r4] - cmp r0, r2 - bne _08010D88 - ldr r0, _08010F14 @ =0xffff1fff - ands r1, r0 - str r1, [r3] -_08010D88: - adds r5, 0x1 - ldr r3, _08010F00 @ =gUnknown_02024A68 - ldrb r3, [r3] - cmp r5, r3 - blt _08010D48 -_08010D92: - ldrb r0, [r7] - ldr r1, _08010F18 @ =gUnknown_02024E60 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldrb r0, [r7] - ldr r2, _08010F1C @ =gUnknown_02024E64 - adds r0, r2 - strb r1, [r0] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r3, r10 - adds r1, r0, r3 - movs r5, 0 - movs r2, 0 -_08010DB4: - adds r0, r1, r5 - strb r2, [r0] - adds r5, 0x1 - cmp r5, 0x1B - bls _08010DB4 - ldr r1, _08010F20 @ =gUnknown_02024BE6 - ldrh r0, [r1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r2, _08010F24 @ =gBattleMoves - adds r1, r2 - ldrb r0, [r1] - cmp r0, 0x7F - bne _08010E2C - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r10 - mov r1, sp - ldrb r1, [r1, 0xA] - strb r1, [r0, 0xA] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r10 - mov r1, sp - ldrb r1, [r1, 0x15] - strb r1, [r0, 0x15] - ldrb r0, [r7] - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - add r1, r10 - mov r0, sp - ldrb r2, [r0, 0xF] - lsls r2, 28 - movs r4, 0xF - lsrs r2, 28 - ldrb r3, [r1, 0xF] - movs r0, 0x10 - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0xF] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r10 - mov r1, sp - ldrb r1, [r1, 0xF] - lsrs r1, 4 - lsls r1, 4 - ldrb r2, [r0, 0xF] - ands r4, r2 - orrs r4, r1 - strb r4, [r0, 0xF] -_08010E2C: - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r10 - movs r3, 0 - movs r1, 0x2 - strb r1, [r0, 0x16] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08010F28 @ =gUnknown_02024C34 - adds r0, r1 - movs r2, 0 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08010F2C @ =gUnknown_02024C3C - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08010F30 @ =gUnknown_02024C44 - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08010F34 @ =gUnknown_02024C4C - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08010F38 @ =gUnknown_02024C2C - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - ldr r1, _08010F3C @ =gUnknown_02024C5C - adds r0, r1 - movs r1, 0xFF - strb r1, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _08010F40 @ =0x000160ac - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x53 - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x1 - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x1 - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x1 - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - subs r1, 0x1B - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - adds r0, r6 - strb r2, [r0] - ldr r2, _08010F44 @ =0x00017100 - adds r1, r6, r2 - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - str r3, [r0] - ldr r6, _08010F20 @ =gUnknown_02024BE6 - strh r3, [r6] - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08010EFC: .4byte 0x02000000 -_08010F00: .4byte gUnknown_02024A68 -_08010F04: .4byte gUnknown_02024AD0 -_08010F08: .4byte gBitTable -_08010F0C: .4byte gUnknown_02024A60 -_08010F10: .4byte 0x00016020 -_08010F14: .4byte 0xffff1fff -_08010F18: .4byte gUnknown_02024E60 -_08010F1C: .4byte gUnknown_02024E64 -_08010F20: .4byte gUnknown_02024BE6 -_08010F24: .4byte gBattleMoves -_08010F28: .4byte gUnknown_02024C34 -_08010F2C: .4byte gUnknown_02024C3C -_08010F30: .4byte gUnknown_02024C44 -_08010F34: .4byte gUnknown_02024C4C -_08010F38: .4byte gUnknown_02024C2C -_08010F3C: .4byte gUnknown_02024C5C -_08010F40: .4byte 0x000160ac -_08010F44: .4byte 0x00017100 - thumb_func_end sub_8010B88 - - thumb_func_start sub_8010F48 -sub_8010F48: @ 8010F48 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r4, 0 - ldr r7, _08011268 @ =gUnknown_02024A60 - ldr r0, _0801126C @ =gUnknown_02024C98 - mov r9, r0 - ldr r1, _08011270 @ =gUnknown_02024A68 - mov r8, r1 - ldr r2, _08011274 @ =0x02000000 - mov r12, r2 - ldr r6, _08011278 @ =gUnknown_02024D28 - adds r5, r7, 0 - movs r3, 0x58 - ldr r2, _0801127C @ =gBattleMons - adds r2, 0x18 - movs r1, 0x6 -_08010F70: - ldrb r0, [r5] - muls r0, r3 - adds r0, r4, r0 - adds r0, r2 - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0x7 - ble _08010F70 - ldrb r1, [r7] - movs r0, 0x58 - muls r0, r1 - ldr r2, _0801127C @ =gBattleMons - adds r2, 0x50 - adds r0, r2 - movs r1, 0 - str r1, [r0] - ldrb r0, [r7] - lsls r0, 2 - add r0, r9 - str r1, [r0] - movs r4, 0 - mov r0, r8 - ldrb r0, [r0] - cmp r4, r0 - bge _08011012 - adds r3, r2, 0 - movs r5, 0 - ldr r1, _08011280 @ =gBitTable - mov r10, r1 - ldr r2, _08011274 @ =0x02000000 - mov r9, r2 -_08010FAE: - ldr r1, [r3] - movs r0, 0x80 - lsls r0, 19 - ands r0, r1 - cmp r0, 0 - beq _08010FCC - ldr r2, _08011284 @ =gUnknown_02024CA8 - adds r0, r5, r2 - ldrb r0, [r0, 0x14] - ldrb r2, [r7] - cmp r0, r2 - bne _08010FCC - ldr r0, _08011288 @ =0xfbffffff - ands r1, r0 - str r1, [r3] -_08010FCC: - ldrb r0, [r7] - lsls r0, 2 - add r0, r10 - ldr r0, [r0] - lsls r2, r0, 16 - ldr r1, [r3] - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _08010FE4 - bics r1, r2 - str r1, [r3] -_08010FE4: - ldr r1, [r3] - movs r0, 0xE0 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _08011004 - ldr r2, _0801128C @ =0x00016020 - adds r0, r4, r2 - add r0, r9 - ldrb r0, [r0] - ldrb r2, [r7] - cmp r0, r2 - bne _08011004 - ldr r0, _08011290 @ =0xffff1fff - ands r1, r0 - str r1, [r3] -_08011004: - adds r3, 0x58 - adds r5, 0x1C - adds r4, 0x1 - mov r0, r8 - ldrb r0, [r0] - cmp r4, r0 - blt _08010FAE -_08011012: - ldrb r0, [r7] - ldr r1, _08011294 @ =gUnknown_02024E60 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldrb r0, [r7] - ldr r2, _08011298 @ =gUnknown_02024E64 - adds r0, r2 - strb r1, [r0] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r2, _08011284 @ =gUnknown_02024CA8 - adds r1, r0, r2 - movs r4, 0 - movs r2, 0 -_08011034: - adds r0, r1, r4 - strb r2, [r0] - adds r4, 0x1 - cmp r4, 0x1B - bls _08011034 - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r0, 0x2 - negs r0, r0 - mov r9, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r0, 0x3 - negs r0, r0 - mov r8, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r0, 0x9 - negs r0, r0 - mov r10, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r0, 0x11 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r5, 0x21 - negs r5, r5 - adds r0, r5, 0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r4, 0x41 - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1] - movs r3, 0x7F - adds r0, r3, 0 - ands r0, r2 - strb r0, [r1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1, 0x1] - mov r0, r9 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1, 0x1] - mov r0, r8 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1, 0x1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r1, [r7] - lsls r1, 4 - adds r1, r6 - ldrb r2, [r1, 0x1] - movs r0, 0x19 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r6 - ldrb r1, [r0, 0x1] - ands r5, r1 - strb r5, [r0, 0x1] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r6 - ldrb r1, [r0, 0x1] - ands r4, r1 - strb r4, [r0, 0x1] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r6 - ldrb r1, [r0, 0x1] - ands r3, r1 - strb r3, [r0, 0x1] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r6 - ldrb r1, [r0, 0x2] - mov r2, r9 - ands r2, r1 - strb r2, [r0, 0x2] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r6 - ldrb r1, [r0, 0x2] - mov r2, r8 - ands r2, r1 - strb r2, [r0, 0x2] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r6 - ldrb r1, [r0, 0x2] - movs r2, 0x5 - negs r2, r2 - ands r2, r1 - strb r2, [r0, 0x2] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r6 - ldrb r1, [r0, 0x2] - mov r2, r10 - ands r2, r1 - strb r2, [r0, 0x2] - ldrb r1, [r7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _08011284 @ =gUnknown_02024CA8 - adds r0, r1 - movs r3, 0 - movs r1, 0x2 - strb r1, [r0, 0x16] - ldrb r0, [r7] - lsls r0, 1 - ldr r2, _0801129C @ =gUnknown_02024C34 - adds r0, r2 - movs r2, 0 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _080112A0 @ =gUnknown_02024C3C - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _080112A4 @ =gUnknown_02024C44 - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _080112A8 @ =gUnknown_02024C4C - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _080112AC @ =gUnknown_02024C2C - adds r0, r1 - strh r3, [r0] - ldrb r0, [r7] - ldr r1, _080112B0 @ =gUnknown_02024C5C - adds r0, r1 - movs r1, 0xFF - strb r1, [r0] - ldrb r0, [r7] - lsls r0, 1 - ldr r1, _080112B4 @ =0x000160e8 - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - subs r1, 0x3D - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 1 - adds r1, 0x1 - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x53 - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x1 - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x1 - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldrb r0, [r7] - lsls r0, 2 - adds r1, 0x1 - adds r0, r1 - add r0, r12 - strb r2, [r0] - ldr r1, _080112B8 @ =0x00017100 - add r1, r12 - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - str r3, [r0] - ldrb r0, [r7] - movs r3, 0x58 - adds r1, r0, 0 - muls r1, r3 - ldr r2, _0801127C @ =gBattleMons - adds r1, r2 - ldrh r2, [r1] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - ldr r2, _080112BC @ =gBaseStats - adds r0, r2 - ldrb r0, [r0, 0x6] - adds r1, 0x21 - strb r0, [r1] - ldrb r0, [r7] - adds r1, r0, 0 - muls r1, r3 - ldr r0, _0801127C @ =gBattleMons - adds r1, r0 - ldrh r2, [r1] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - ldr r2, _080112BC @ =gBaseStats - adds r0, r2 - ldrb r0, [r0, 0x7] - adds r1, 0x22 - strb r0, [r1] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08011268: .4byte gUnknown_02024A60 -_0801126C: .4byte gUnknown_02024C98 -_08011270: .4byte gUnknown_02024A68 -_08011274: .4byte 0x02000000 -_08011278: .4byte gUnknown_02024D28 -_0801127C: .4byte gBattleMons -_08011280: .4byte gBitTable -_08011284: .4byte gUnknown_02024CA8 -_08011288: .4byte 0xfbffffff -_0801128C: .4byte 0x00016020 -_08011290: .4byte 0xffff1fff -_08011294: .4byte gUnknown_02024E60 -_08011298: .4byte gUnknown_02024E64 -_0801129C: .4byte gUnknown_02024C34 -_080112A0: .4byte gUnknown_02024C3C -_080112A4: .4byte gUnknown_02024C44 -_080112A8: .4byte gUnknown_02024C4C -_080112AC: .4byte gUnknown_02024C2C -_080112B0: .4byte gUnknown_02024C5C -_080112B4: .4byte 0x000160e8 -_080112B8: .4byte 0x00017100 -_080112BC: .4byte gBaseStats - thumb_func_end sub_8010F48 - - thumb_func_start bc_8012FAC -bc_8012FAC: @ 80112C0 - push {r4,r5,lr} - ldr r5, _080112D0 @ =gUnknown_02024D1E - ldrb r0, [r5] - cmp r0, 0 - beq _080112D4 - cmp r0, 0x1 - beq _080112F8 - b _0801132E - .align 2, 0 -_080112D0: .4byte gUnknown_02024D1E -_080112D4: - ldr r4, _080112F4 @ =gUnknown_02024A60 - ldrb r0, [r5, 0x1] - strb r0, [r4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl dp01_build_cmdbuf_x00_a_b_0 - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _0801132E - .align 2, 0 -_080112F4: .4byte gUnknown_02024A60 -_080112F8: - ldr r0, _0801131C @ =gUnknown_02024A64 - ldr r2, [r0] - cmp r2, 0 - bne _0801132E - ldrb r0, [r5, 0x1] - adds r0, 0x1 - strb r0, [r5, 0x1] - ldr r1, _08011320 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bne _0801132C - ldr r1, _08011324 @ =gUnknown_030042D4 - ldr r0, _08011328 @ =bc_load_battlefield - str r0, [r1] - b _0801132E - .align 2, 0 -_0801131C: .4byte gUnknown_02024A64 -_08011320: .4byte gUnknown_02024A68 -_08011324: .4byte gUnknown_030042D4 -_08011328: .4byte bc_load_battlefield -_0801132C: - strb r2, [r5] -_0801132E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end bc_8012FAC - - thumb_func_start bc_load_battlefield -bc_load_battlefield: @ 8011334 - push {r4,r5,lr} - ldr r0, _0801136C @ =gUnknown_02024A64 - ldr r5, [r0] - cmp r5, 0 - bne _08011364 - movs r0, 0 - bl battle_get_side_with_given_state - ldr r4, _08011370 @ =gUnknown_02024A60 - strb r0, [r4] - ldr r0, _08011374 @ =gBattleTerrain - ldrb r1, [r0] - movs r0, 0 - bl dp01_build_cmdbuf_x2E_a - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution - ldr r1, _08011378 @ =gUnknown_030042D4 - ldr r0, _0801137C @ =sub_8011384 - str r0, [r1] - ldr r0, _08011380 @ =gUnknown_02024D1E - strb r5, [r0] - strb r5, [r0, 0x1] -_08011364: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801136C: .4byte gUnknown_02024A64 -_08011370: .4byte gUnknown_02024A60 -_08011374: .4byte gBattleTerrain -_08011378: .4byte gUnknown_030042D4 -_0801137C: .4byte sub_8011384 -_08011380: .4byte gUnknown_02024D1E - thumb_func_end bc_load_battlefield - - thumb_func_start sub_8011384 -sub_8011384: @ 8011384 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, _080113E0 @ =gUnknown_02024A64 - ldr r1, [r0] - cmp r1, 0 - beq _08011396 - b _080115DA -_08011396: - ldr r2, _080113E4 @ =gUnknown_02024A60 - strb r1, [r2] - ldr r0, _080113E8 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r1, r0 - bcc _080113A4 - b _080115D4 -_080113A4: - movs r7, 0x58 - ldr r0, _080113EC @ =gBattleMons - mov r9, r0 - mov r8, r2 -_080113AC: - ldr r0, _080113F0 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080113F4 - ldr r4, _080113E4 @ =gUnknown_02024A60 - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080113F4 - ldrb r0, [r4] - muls r0, r7 - mov r1, r9 - adds r3, r0, r1 - movs r2, 0 - movs r1, 0 -_080113D2: - adds r0, r3, r2 - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x57 - bls _080113D2 - b _080114BE - .align 2, 0 -_080113E0: .4byte gUnknown_02024A64 -_080113E4: .4byte gUnknown_02024A60 -_080113E8: .4byte gUnknown_02024A68 -_080113EC: .4byte gBattleMons -_080113F0: .4byte gBattleTypeFlags -_080113F4: - mov r2, r8 - ldrb r0, [r2] - muls r0, r7 - mov r1, r9 - adds r3, r0, r1 - movs r2, 0 - ldr r6, _08011530 @ =gBaseStats - ldr r5, _08011534 @ =gUnknown_02024260 - ldr r4, _08011538 @ =gUnknown_02024A60 -_08011406: - adds r0, r3, r2 - ldrb r1, [r4] - lsls r1, 9 - adds r1, 0x4 - adds r1, r2, r1 - adds r1, r5 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x57 - bls _08011406 - mov r2, r8 - ldrb r0, [r2] - adds r2, r0, 0 - muls r2, r7 - add r2, r9 - ldrh r1, [r2] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r0, [r0, 0x6] - adds r2, 0x21 - strb r0, [r2] - mov r1, r8 - ldrb r0, [r1] - adds r2, r0, 0 - muls r2, r7 - add r2, r9 - ldrh r1, [r2] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r0, [r0, 0x7] - adds r2, 0x22 - strb r0, [r2] - mov r2, r8 - ldrb r0, [r2] - adds r1, r0, 0 - muls r1, r7 - add r1, r9 - ldrh r0, [r1] - ldrb r1, [r1, 0x17] - lsrs r1, 7 - bl GetAbilityBySpecies - mov r2, r8 - ldrb r1, [r2] - muls r1, r7 - add r1, r9 - adds r1, 0x20 - strb r0, [r1] - ldrb r0, [r2] - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 23 - ldr r1, _0801153C @ =0x020160bc - adds r0, r1 - mov r2, r8 - ldrb r1, [r2] - muls r1, r7 - add r1, r9 - ldrh r1, [r1, 0x28] - strh r1, [r0] - movs r2, 0 - ldr r4, _08011538 @ =gUnknown_02024A60 - movs r5, 0x58 - ldr r1, _08011540 @ =gUnknown_02024A98 - adds r6, r4, 0 - movs r0, 0x18 - negs r0, r0 - adds r0, r1 - mov r12, r0 - movs r3, 0x6 -_0801149E: - ldrb r0, [r4] - muls r0, r5 - adds r0, r2, r0 - adds r0, r1 - strb r3, [r0] - adds r2, 0x1 - cmp r2, 0x7 - ble _0801149E - ldrb r0, [r6] - adds r1, r0, 0 - muls r1, r7 - mov r0, r12 - adds r0, 0x50 - adds r1, r0 - movs r0, 0 - str r0, [r1] -_080114BE: - ldr r4, _08011538 @ =gUnknown_02024A60 - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - cmp r0, 0 - bne _080114D8 - movs r0, 0 - bl dp01_build_cmdbuf_x07_7_7_7 - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_080114D8: - ldr r5, _08011544 @ =gBattleTypeFlags - ldrh r1, [r5] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0801154C - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080114FE - movs r0, 0 - bl dp01_build_cmdbuf_x07_7_7_7 - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_080114FE: - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08011588 - ldrh r1, [r5] - ldr r2, _08011548 @ =0x00000902 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _08011588 - ldrb r0, [r4] - muls r0, r7 - add r0, r9 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x2 - bl sub_8090D90 - b _08011588 - .align 2, 0 -_08011530: .4byte gBaseStats -_08011534: .4byte gUnknown_02024260 -_08011538: .4byte gUnknown_02024A60 -_0801153C: .4byte 0x020160bc -_08011540: .4byte gUnknown_02024A98 -_08011544: .4byte gBattleTypeFlags -_08011548: .4byte 0x00000902 -_0801154C: - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08011588 - ldrh r1, [r5] - ldr r2, _080115E8 @ =0x00000902 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _08011588 - ldrb r0, [r4] - muls r0, r7 - add r0, r9 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x2 - bl sub_8090D90 - movs r0, 0 - bl dp01_build_cmdbuf_x04_4_4_4 - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_08011588: - ldr r0, _080115EC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080115BE - ldr r4, _080115F0 @ =gUnknown_02024A60 - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080115B2 - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _080115BE -_080115B2: - movs r0, 0 - bl dp01_build_cmdbuf_x07_7_7_7 - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_080115BE: - mov r1, r8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r1, _080115F4 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcs _080115D4 - b _080113AC -_080115D4: - ldr r1, _080115F8 @ =gUnknown_030042D4 - ldr r0, _080115FC @ =bc_801333C - str r0, [r1] -_080115DA: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080115E8: .4byte 0x00000902 -_080115EC: .4byte gBattleTypeFlags -_080115F0: .4byte gUnknown_02024A60 -_080115F4: .4byte gUnknown_02024A68 -_080115F8: .4byte gUnknown_030042D4 -_080115FC: .4byte bc_801333C - thumb_func_end sub_8011384 - - thumb_func_start bc_801333C -bc_801333C: @ 8011600 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x30 - ldr r0, _08011658 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - beq _08011612 - b _0801178C -_08011612: - ldr r0, _0801165C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _08011620 - b _0801172C -_08011620: - movs r7, 0 - add r0, sp, 0x4 - mov r8, r0 - mov r6, r8 - mov r5, sp -_0801162A: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _08011660 @ =gEnemyParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _08011650 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _08011668 -_08011650: - ldr r0, _08011664 @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _0801167A - .align 2, 0 -_08011658: .4byte gUnknown_02024A64 -_0801165C: .4byte gBattleTypeFlags -_08011660: .4byte gEnemyParty -_08011664: .4byte 0x0000ffff -_08011668: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_0801167A: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _0801162A - movs r0, 0x1 - bl battle_get_side_with_given_state - ldr r4, _080116D4 @ =gUnknown_02024A60 - strb r0, [r4] - movs r0, 0 - mov r1, sp - movs r2, 0x80 - bl dp01_build_cmdbuf_x30_TODO - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution - movs r7, 0 - mov r6, r8 - mov r5, sp -_080116A6: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _080116D8 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _080116CC - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _080116E0 -_080116CC: - ldr r0, _080116DC @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _080116F2 - .align 2, 0 -_080116D4: .4byte gUnknown_02024A60 -_080116D8: .4byte gPlayerParty -_080116DC: .4byte 0x0000ffff -_080116E0: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_080116F2: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _080116A6 - movs r0, 0 - bl battle_get_side_with_given_state - ldr r4, _08011720 @ =gUnknown_02024A60 - strb r0, [r4] - movs r0, 0 - mov r1, sp - movs r2, 0x80 - bl dp01_build_cmdbuf_x30_TODO - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution - ldr r1, _08011724 @ =gUnknown_030042D4 - ldr r0, _08011728 @ =bc_battle_begin_message - b _0801178A - .align 2, 0 -_08011720: .4byte gUnknown_02024A60 -_08011724: .4byte gUnknown_030042D4 -_08011728: .4byte bc_battle_begin_message -_0801172C: - movs r7, 0 - add r6, sp, 0x4 - mov r5, sp -_08011732: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _08011760 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - cmp r0, 0 - beq _08011758 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _08011768 -_08011758: - ldr r0, _08011764 @ =0x0000ffff - strh r0, [r5] - movs r0, 0 - b _0801177A - .align 2, 0 -_08011760: .4byte gPlayerParty -_08011764: .4byte 0x0000ffff -_08011768: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r5] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData -_0801177A: - str r0, [r6] - adds r6, 0x8 - adds r5, 0x8 - adds r7, 0x1 - cmp r7, 0x5 - ble _08011732 - ldr r1, _08011798 @ =gUnknown_030042D4 - ldr r0, _0801179C @ =bc_8013568 -_0801178A: - str r0, [r1] -_0801178C: - add sp, 0x30 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08011798: .4byte gUnknown_030042D4 -_0801179C: .4byte bc_8013568 - thumb_func_end bc_801333C - - thumb_func_start bc_battle_begin_message -bc_battle_begin_message: @ 80117A0 - push {lr} - ldr r0, _080117C8 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - bne _080117C2 - movs r0, 0x1 - bl battle_get_side_with_given_state - ldr r1, _080117CC @ =gUnknown_02024A60 - strb r0, [r1] - ldrb r1, [r1] - movs r0, 0 - bl b_std_message - ldr r1, _080117D0 @ =gUnknown_030042D4 - ldr r0, _080117D4 @ =sub_8011800 - str r0, [r1] -_080117C2: - pop {r0} - bx r0 - .align 2, 0 -_080117C8: .4byte gUnknown_02024A64 -_080117CC: .4byte gUnknown_02024A60 -_080117D0: .4byte gUnknown_030042D4 -_080117D4: .4byte sub_8011800 - thumb_func_end bc_battle_begin_message - - thumb_func_start bc_8013568 -bc_8013568: @ 80117D8 - push {lr} - ldr r0, _080117F4 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - bne _080117F0 - ldr r1, _080117F8 @ =gUnknown_030042D4 - ldr r0, _080117FC @ =sub_8011970 - str r0, [r1] - movs r0, 0 - movs r1, 0 - bl b_std_message -_080117F0: - pop {r0} - bx r0 - .align 2, 0 -_080117F4: .4byte gUnknown_02024A64 -_080117F8: .4byte gUnknown_030042D4 -_080117FC: .4byte sub_8011970 - thumb_func_end bc_8013568 - - thumb_func_start sub_8011800 -sub_8011800: @ 8011800 - push {lr} - ldr r0, _08011828 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - bne _08011822 - movs r0, 0x1 - bl battle_get_side_with_given_state - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x1 - bl b_std_message - ldr r1, _0801182C @ =gUnknown_030042D4 - ldr r0, _08011830 @ =sub_8011834 - str r0, [r1] -_08011822: - pop {r0} - bx r0 - .align 2, 0 -_08011828: .4byte gUnknown_02024A64 -_0801182C: .4byte gUnknown_030042D4 -_08011830: .4byte sub_8011834 - thumb_func_end sub_8011800 - - thumb_func_start sub_8011834 -sub_8011834: @ 8011834 - push {r4,lr} - ldr r0, _080118AC @ =gUnknown_02024A64 - ldr r1, [r0] - cmp r1, 0 - bne _080118A4 - ldr r2, _080118B0 @ =gUnknown_02024A60 - strb r1, [r2] - ldr r0, _080118B4 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r1, r0 - bcs _0801189E - adds r4, r2, 0 -_0801184C: - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08011866 - movs r0, 0 - bl dp01_build_cmdbuf_x2F_2F_2F_2F - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_08011866: - ldr r0, _080118B8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0801188C - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0801188C - movs r0, 0 - bl dp01_build_cmdbuf_x2F_2F_2F_2F - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_0801188C: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _080118B4 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _0801184C -_0801189E: - ldr r1, _080118BC @ =gUnknown_030042D4 - ldr r0, _080118C0 @ =bc_801362C - str r0, [r1] -_080118A4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080118AC: .4byte gUnknown_02024A64 -_080118B0: .4byte gUnknown_02024A60 -_080118B4: .4byte gUnknown_02024A68 -_080118B8: .4byte gBattleTypeFlags -_080118BC: .4byte gUnknown_030042D4 -_080118C0: .4byte bc_801362C - thumb_func_end sub_8011834 - - thumb_func_start bc_801362C -bc_801362C: @ 80118C4 - push {r4,r5,lr} - ldr r0, _08011930 @ =gUnknown_02024A64 - ldr r1, [r0] - cmp r1, 0 - bne _0801192A - ldr r2, _08011934 @ =gUnknown_02024A60 - strb r1, [r2] - ldr r0, _08011938 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r1, r0 - bcs _08011924 - adds r4, r2, 0 - ldr r5, _0801193C @ =gBattleMons -_080118DE: - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08011912 - ldr r0, _08011940 @ =gBattleTypeFlags - ldrh r1, [r0] - ldr r2, _08011944 @ =0x00000902 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _08011912 - ldrb r1, [r4] - movs r0, 0x58 - muls r0, r1 - adds r0, r5 - ldrh r0, [r0] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x2 - bl sub_8090D90 -_08011912: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08011938 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _080118DE -_08011924: - ldr r1, _08011948 @ =gUnknown_030042D4 - ldr r0, _0801194C @ =sub_8011970 - str r0, [r1] -_0801192A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08011930: .4byte gUnknown_02024A64 -_08011934: .4byte gUnknown_02024A60 -_08011938: .4byte gUnknown_02024A68 -_0801193C: .4byte gBattleMons -_08011940: .4byte gBattleTypeFlags -_08011944: .4byte 0x00000902 -_08011948: .4byte gUnknown_030042D4 -_0801194C: .4byte sub_8011970 - thumb_func_end bc_801362C - - thumb_func_start unref_sub_8011950 -unref_sub_8011950: @ 8011950 - push {lr} - ldr r0, _08011964 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - bne _08011960 - ldr r1, _08011968 @ =gUnknown_030042D4 - ldr r0, _0801196C @ =sub_8011970 - str r0, [r1] -_08011960: - pop {r0} - bx r0 - .align 2, 0 -_08011964: .4byte gUnknown_02024A64 -_08011968: .4byte gUnknown_030042D4 -_0801196C: .4byte sub_8011970 - thumb_func_end unref_sub_8011950 - - thumb_func_start sub_8011970 -sub_8011970: @ 8011970 - push {lr} - ldr r0, _080119A4 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - bne _0801199E - ldr r0, _080119A8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08011998 - movs r0, 0 - bl battle_get_side_with_given_state - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x1 - bl b_std_message -_08011998: - ldr r1, _080119AC @ =gUnknown_030042D4 - ldr r0, _080119B0 @ =sub_80119B4 - str r0, [r1] -_0801199E: - pop {r0} - bx r0 - .align 2, 0 -_080119A4: .4byte gUnknown_02024A64 -_080119A8: .4byte gBattleTypeFlags -_080119AC: .4byte gUnknown_030042D4 -_080119B0: .4byte sub_80119B4 - thumb_func_end sub_8011970 - - thumb_func_start sub_80119B4 -sub_80119B4: @ 80119B4 - push {r4,lr} - ldr r0, _08011A40 @ =gUnknown_02024A64 - ldr r1, [r0] - cmp r1, 0 - bne _08011A38 - ldr r2, _08011A44 @ =gUnknown_02024A60 - strb r1, [r2] - ldr r0, _08011A48 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r1, r0 - bcs _08011A1C - adds r4, r2, 0 -_080119CC: - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - cmp r0, 0 - bne _080119E4 - movs r0, 0 - bl dp01_build_cmdbuf_x2F_2F_2F_2F - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_080119E4: - ldr r0, _08011A4C @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08011A0A - ldrb r0, [r4] - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08011A0A - movs r0, 0 - bl dp01_build_cmdbuf_x2F_2F_2F_2F - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_08011A0A: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08011A48 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _080119CC -_08011A1C: - ldr r1, _08011A50 @ =0x02000000 - ldr r2, _08011A54 @ =0x00016058 - adds r0, r1, r2 - movs r2, 0 - strb r2, [r0] - ldr r3, _08011A58 @ =0x000160f9 - adds r0, r1, r3 - strb r2, [r0] - ldr r0, _08011A5C @ =0x000160e6 - adds r1, r0 - strb r2, [r1] - ldr r1, _08011A60 @ =gUnknown_030042D4 - ldr r0, _08011A64 @ =sub_8011B00 - str r0, [r1] -_08011A38: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011A40: .4byte gUnknown_02024A64 -_08011A44: .4byte gUnknown_02024A60 -_08011A48: .4byte gUnknown_02024A68 -_08011A4C: .4byte gBattleTypeFlags -_08011A50: .4byte 0x02000000 -_08011A54: .4byte 0x00016058 -_08011A58: .4byte 0x000160f9 -_08011A5C: .4byte 0x000160e6 -_08011A60: .4byte gUnknown_030042D4 -_08011A64: .4byte sub_8011B00 - thumb_func_end sub_80119B4 - - thumb_func_start unref_sub_8011A68 -unref_sub_8011A68: @ 8011A68 - push {r4,r5,lr} - ldr r0, _08011AD8 @ =gUnknown_02024A64 - ldr r1, [r0] - cmp r1, 0 - bne _08011AD2 - ldr r2, _08011ADC @ =gUnknown_02024A60 - strb r1, [r2] - ldr r0, _08011AE0 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r1, r0 - bcs _08011AB6 - adds r4, r2, 0 - ldr r5, _08011AE4 @ =gUnknown_02024A6A -_08011A82: - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08011AA4 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r5 - ldrb r1, [r0] - movs r0, 0 - movs r2, 0 - bl sub_800C704 - ldrb r0, [r4] - bl dp01_battle_side_mark_buffer_for_execution -_08011AA4: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - ldr r1, _08011AE0 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08011A82 -_08011AB6: - ldr r1, _08011AE8 @ =0x02000000 - ldr r2, _08011AEC @ =0x00016058 - adds r0, r1, r2 - movs r2, 0 - strb r2, [r0] - ldr r3, _08011AF0 @ =0x000160f9 - adds r0, r1, r3 - strb r2, [r0] - ldr r0, _08011AF4 @ =0x000160e6 - adds r1, r0 - strb r2, [r1] - ldr r1, _08011AF8 @ =gUnknown_030042D4 - ldr r0, _08011AFC @ =sub_8011B00 - str r0, [r1] -_08011AD2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08011AD8: .4byte gUnknown_02024A64 -_08011ADC: .4byte gUnknown_02024A60 -_08011AE0: .4byte gUnknown_02024A68 -_08011AE4: .4byte gUnknown_02024A6A -_08011AE8: .4byte 0x02000000 -_08011AEC: .4byte 0x00016058 -_08011AF0: .4byte 0x000160f9 -_08011AF4: .4byte 0x000160e6 -_08011AF8: .4byte gUnknown_030042D4 -_08011AFC: .4byte sub_8011B00 - thumb_func_end unref_sub_8011A68 - - thumb_func_start sub_8011B00 -sub_8011B00: @ 8011B00 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - movs r0, 0 - mov r9, r0 - ldr r0, _08011B44 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - beq _08011B18 - b _08011D6E -_08011B18: - ldr r0, _08011B48 @ =0x02000000 - ldr r1, _08011B4C @ =0x00016058 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _08011BA2 - movs r5, 0 - ldr r1, _08011B50 @ =gUnknown_02024A68 - adds r3, r1, 0 - ldrb r2, [r1] - cmp r5, r2 - bge _08011B3E - ldr r2, _08011B54 @ =gUnknown_02024A7A -_08011B32: - adds r0, r5, r2 - strb r5, [r0] - adds r5, 0x1 - ldrb r0, [r1] - cmp r5, r0 - blt _08011B32 -_08011B3E: - movs r5, 0 - b _08011B98 - .align 2, 0 -_08011B44: .4byte gUnknown_02024A64 -_08011B48: .4byte 0x02000000 -_08011B4C: .4byte 0x00016058 -_08011B50: .4byte gUnknown_02024A68 -_08011B54: .4byte gUnknown_02024A7A -_08011B58: - adds r4, r5, 0x1 - mov r8, r4 - ldrb r1, [r1] - cmp r8, r1 - bge _08011B96 - ldr r6, _08011BC8 @ =gUnknown_02024A7A - ldr r3, _08011BCC @ =gUnknown_02024A68 - lsls r7, r5, 24 -_08011B68: - adds r0, r5, r6 - ldrb r0, [r0] - adds r1, r4, r6 - ldrb r1, [r1] - movs r2, 0x1 - str r3, [sp, 0x4] - bl b_first_side - lsls r0, 24 - ldr r3, [sp, 0x4] - cmp r0, 0 - beq _08011B8C - lsls r1, r4, 24 - lsrs r1, 24 - lsrs r0, r7, 24 - bl sub_8012FBC - ldr r3, [sp, 0x4] -_08011B8C: - adds r4, 0x1 - ldr r0, _08011BCC @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r4, r0 - blt _08011B68 -_08011B96: - mov r5, r8 -_08011B98: - adds r1, r3, 0 - ldrb r0, [r3] - subs r0, 0x1 - cmp r5, r0 - blt _08011B58 -_08011BA2: - ldr r0, _08011BD0 @ =0x02000000 - ldr r1, _08011BD4 @ =0x000160e6 - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0 - bne _08011BD8 - str r0, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0xFF - bl sub_8018324 - lsls r0, 24 - cmp r0, 0 - beq _08011BD8 - movs r0, 0x1 - strb r0, [r4] - b _08011D6E - .align 2, 0 -_08011BC8: .4byte gUnknown_02024A7A -_08011BCC: .4byte gUnknown_02024A68 -_08011BD0: .4byte 0x02000000 -_08011BD4: .4byte 0x000160e6 -_08011BD8: - ldr r0, _08011D7C @ =0x02000000 - ldr r3, _08011D80 @ =0x00016058 - adds r2, r0, r3 - ldr r1, _08011D84 @ =gUnknown_02024A68 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bcs _08011C28 - ldr r5, _08011D88 @ =gUnknown_02024A7A - adds r4, r2, 0 -_08011BEC: - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl sub_8018324 - lsls r0, 24 - cmp r0, 0 - beq _08011C0E - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_08011C0E: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - mov r1, r9 - cmp r1, 0 - beq _08011C1C - b _08011D6E -_08011C1C: - ldr r1, _08011D84 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08011BEC -_08011C28: - movs r0, 0 - str r0, [sp] - movs r0, 0x9 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8018324 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08011C42 - b _08011D6E -_08011C42: - str r0, [sp] - movs r0, 0xB - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8018324 - lsls r0, 24 - cmp r0, 0 - beq _08011C58 - b _08011D6E -_08011C58: - ldr r0, _08011D7C @ =0x02000000 - ldr r3, _08011D8C @ =0x000160f9 - adds r2, r0, r3 - ldr r0, _08011D84 @ =gUnknown_02024A68 - ldrb r1, [r2] - adds r3, r0, 0 - ldrb r0, [r3] - cmp r1, r0 - bcs _08011CA8 - ldr r5, _08011D88 @ =gUnknown_02024A7A - adds r4, r2, 0 -_08011C6E: - ldrb r0, [r4] - adds r0, r5 - ldrb r1, [r0] - movs r0, 0 - movs r2, 0 - str r3, [sp, 0x4] - bl sub_801A02C - lsls r0, 24 - ldr r3, [sp, 0x4] - cmp r0, 0 - beq _08011C90 - mov r0, r9 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_08011C90: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - mov r1, r9 - cmp r1, 0 - bne _08011D6E - ldr r1, _08011D84 @ =gUnknown_02024A68 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bcc _08011C6E -_08011CA8: - ldrb r0, [r3] - cmp r0, 0 - beq _08011CB6 - adds r5, r0, 0 -_08011CB0: - subs r5, 0x1 - cmp r5, 0 - bne _08011CB0 -_08011CB6: - movs r5, 0 - ldr r0, _08011D7C @ =0x02000000 - mov r8, r5 - ldr r3, _08011D90 @ =gUnknown_02024C60 - ldr r1, _08011D94 @ =0x00016068 - adds r2, r0, r1 - movs r7, 0x6 - ldr r6, _08011D98 @ =gUnknown_02024C18 - movs r4, 0xFF -_08011CC8: - strb r7, [r2] - adds r1, r5, r6 - ldrb r0, [r1] - orrs r0, r4 - strb r0, [r1] - mov r0, r8 - strh r0, [r3] - adds r3, 0x2 - adds r2, 0x1 - adds r5, 0x1 - cmp r5, 0x3 - ble _08011CC8 - movs r0, 0 - bl sub_801365C - bl sub_801377C - ldr r0, _08011D7C @ =0x02000000 - ldr r1, _08011D9C @ =gUnknown_02024C0C - ldrb r1, [r1] - ldr r2, _08011DA0 @ =0x000160a6 - adds r0, r2 - strb r1, [r0] - ldr r1, _08011DA4 @ =gUnknown_030042D4 - ldr r0, _08011DA8 @ =sub_8012324 - str r0, [r1] - bl sub_80156DC - ldr r1, _08011DAC @ =gUnknown_02024D1E - movs r2, 0 - adds r0, r1, 0x7 -_08011D06: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08011D06 - movs r5, 0 - ldr r3, _08011D84 @ =gUnknown_02024A68 - ldr r2, _08011D7C @ =0x02000000 - ldr r6, _08011DB0 @ =gBattleMoveFlags - ldrb r0, [r3] - cmp r5, r0 - bge _08011D36 - ldr r0, _08011DB4 @ =gBattleMons - movs r4, 0x9 - negs r4, r4 - adds r1, r0, 0 - adds r1, 0x50 -_08011D26: - ldr r0, [r1] - ands r0, r4 - str r0, [r1] - adds r1, 0x58 - adds r5, 0x1 - ldrb r0, [r3] - cmp r5, r0 - blt _08011D26 -_08011D36: - movs r1, 0xB0 - lsls r1, 9 - adds r0, r2, r1 - movs r1, 0 - strb r1, [r0] - ldr r3, _08011DB8 @ =0x00016001 - adds r0, r2, r3 - strb r1, [r0] - ldr r3, _08011DBC @ =0x00016110 - adds r0, r2, r3 - strb r1, [r0] - adds r3, 0x1 - adds r0, r2, r3 - strb r1, [r0] - ldr r3, _08011DC0 @ =0x0001600c - adds r0, r2, r3 - strb r1, [r0] - adds r3, 0x4D - adds r0, r2, r3 - strb r1, [r0] - subs r3, 0x4B - adds r0, r2, r3 - strb r1, [r0] - strb r1, [r6] - bl Random - ldr r1, _08011DC4 @ =gUnknown_02024D1C - strh r0, [r1] -_08011D6E: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08011D7C: .4byte 0x02000000 -_08011D80: .4byte 0x00016058 -_08011D84: .4byte gUnknown_02024A68 -_08011D88: .4byte gUnknown_02024A7A -_08011D8C: .4byte 0x000160f9 -_08011D90: .4byte gUnknown_02024C60 -_08011D94: .4byte 0x00016068 -_08011D98: .4byte gUnknown_02024C18 -_08011D9C: .4byte gUnknown_02024C0C -_08011DA0: .4byte 0x000160a6 -_08011DA4: .4byte gUnknown_030042D4 -_08011DA8: .4byte sub_8012324 -_08011DAC: .4byte gUnknown_02024D1E -_08011DB0: .4byte gBattleMoveFlags -_08011DB4: .4byte gBattleMons -_08011DB8: .4byte 0x00016001 -_08011DBC: .4byte 0x00016110 -_08011DC0: .4byte 0x0001600c -_08011DC4: .4byte gUnknown_02024D1C - thumb_func_end sub_8011B00 - - thumb_func_start bc_8013B1C -bc_8013B1C: @ 8011DC8 - push {r4-r6,lr} - ldr r0, _08011E60 @ =gUnknown_02024A64 - ldr r0, [r0] - cmp r0, 0 - bne _08011E5A - ldr r1, _08011E64 @ =gUnknown_030042D4 - ldr r0, _08011E68 @ =sub_8011E8C - str r0, [r1] - ldr r3, _08011E6C @ =gUnknown_02024A68 - ldr r1, _08011E70 @ =gUnknown_02024D1E - movs r2, 0 - adds r0, r1, 0x7 -_08011DE0: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08011DE0 - movs r4, 0 - ldrb r3, [r3] - cmp r4, r3 - bge _08011E32 - ldr r5, _08011E74 @ =gBattleMons - adds r6, r5, 0 - adds r6, 0x4C -_08011DF6: - movs r0, 0x58 - adds r2, r4, 0 - muls r2, r0 - adds r1, r5, 0 - adds r1, 0x50 - adds r1, r2, r1 - ldr r3, [r1] - subs r0, 0x61 - ands r3, r0 - str r3, [r1] - adds r2, r6 - ldr r0, [r2] - movs r1, 0x7 - ands r0, r1 - cmp r0, 0 - beq _08011E28 - movs r0, 0x80 - lsls r0, 5 - ands r3, r0 - cmp r3, 0 - beq _08011E28 - lsls r0, r4, 24 - lsrs r0, 24 - bl b_cancel_multi_turn_move_maybe -_08011E28: - adds r4, 0x1 - ldr r0, _08011E6C @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r4, r0 - blt _08011DF6 -_08011E32: - ldr r0, _08011E78 @ =0x02000000 - movs r2, 0xB0 - lsls r2, 9 - adds r1, r0, r2 - movs r2, 0 - strb r2, [r1] - ldr r3, _08011E7C @ =0x00016001 - adds r1, r0, r3 - strb r2, [r1] - ldr r3, _08011E80 @ =0x00016110 - adds r1, r0, r3 - strb r2, [r1] - adds r3, 0x1 - adds r1, r0, r3 - strb r2, [r1] - ldr r1, _08011E84 @ =0x0001600e - adds r0, r1 - strb r2, [r0] - ldr r0, _08011E88 @ =gBattleMoveFlags - strb r2, [r0] -_08011E5A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08011E60: .4byte gUnknown_02024A64 -_08011E64: .4byte gUnknown_030042D4 -_08011E68: .4byte sub_8011E8C -_08011E6C: .4byte gUnknown_02024A68 -_08011E70: .4byte gUnknown_02024D1E -_08011E74: .4byte gBattleMons -_08011E78: .4byte 0x02000000 -_08011E7C: .4byte 0x00016001 -_08011E80: .4byte 0x00016110 -_08011E84: .4byte 0x0001600e -_08011E88: .4byte gBattleMoveFlags - thumb_func_end bc_8013B1C - - thumb_func_start sub_8011E8C -sub_8011E8C: @ 8011E8C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0x1 - bl sub_801365C - ldr r0, _08011F3C @ =gUnknown_02024D26 - ldrb r0, [r0] - cmp r0, 0 - bne _08011EBC - bl sub_8015DFC - lsls r0, 24 - cmp r0, 0 - beq _08011EB0 - b _08011FEE -_08011EB0: - bl sub_8016558 - lsls r0, 24 - cmp r0, 0 - beq _08011EBC - b _08011FEE -_08011EBC: - bl sub_80173A4 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08011ECA - b _08011FEE -_08011ECA: - ldr r5, _08011F40 @ =0x02000000 - ldr r2, _08011F44 @ =0x00016059 - adds r0, r5, r2 - strb r1, [r0] - bl sub_80170DC - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _08011EE0 - b _08011FEE -_08011EE0: - movs r0, 0 - bl sub_801365C - ldr r2, _08011F48 @ =gUnknown_02024C6C - ldr r0, [r2] - ldr r1, _08011F4C @ =0xfffffdff - ands r0, r1 - ldr r1, _08011F50 @ =0xfff7ffff - ands r0, r1 - ldr r1, _08011F54 @ =0xffbfffff - ands r0, r1 - ldr r1, _08011F58 @ =0xffefffff - ands r0, r1 - str r0, [r2] - ldr r3, _08011F5C @ =0x00016002 - adds r0, r5, r3 - strb r4, [r0] - ldr r1, _08011F60 @ =0x000160a1 - adds r0, r5, r1 - strb r4, [r0] - ldr r2, _08011F64 @ =0x0001600c - adds r0, r5, r2 - strb r4, [r0] - ldr r0, _08011F68 @ =gBattleMoveDamage - str r4, [r0] - ldr r0, _08011F6C @ =gBattleMoveFlags - strb r4, [r0] - ldr r1, _08011F70 @ =gUnknown_02024D1E - movs r2, 0 - adds r0, r1, 0x4 -_08011F1C: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08011F1C - ldr r0, _08011F3C @ =gUnknown_02024D26 - ldrb r0, [r0] - cmp r0, 0 - beq _08011F80 - ldr r1, _08011F74 @ =gUnknown_02024A7F - movs r0, 0xC - strb r0, [r1] - ldr r1, _08011F78 @ =gUnknown_030042D4 - ldr r0, _08011F7C @ =sub_80138F0 - str r0, [r1] - b _08011FEE - .align 2, 0 -_08011F3C: .4byte gUnknown_02024D26 -_08011F40: .4byte 0x02000000 -_08011F44: .4byte 0x00016059 -_08011F48: .4byte gUnknown_02024C6C -_08011F4C: .4byte 0xfffffdff -_08011F50: .4byte 0xfff7ffff -_08011F54: .4byte 0xffbfffff -_08011F58: .4byte 0xffefffff -_08011F5C: .4byte 0x00016002 -_08011F60: .4byte 0x000160a1 -_08011F64: .4byte 0x0001600c -_08011F68: .4byte gBattleMoveDamage -_08011F6C: .4byte gBattleMoveFlags -_08011F70: .4byte gUnknown_02024D1E -_08011F74: .4byte gUnknown_02024A7F -_08011F78: .4byte gUnknown_030042D4 -_08011F7C: .4byte sub_80138F0 -_08011F80: - ldr r1, _08011FFC @ =gUnknown_030042E0 - ldrb r0, [r1, 0x13] - cmp r0, 0xFE - bhi _08011F8C - adds r0, 0x1 - strb r0, [r1, 0x13] -_08011F8C: - movs r2, 0 - ldr r4, _08012000 @ =gUnknown_02024A68 - ldr r3, _08012004 @ =0x02000000 - mov r9, r3 - ldr r0, _08012008 @ =gUnknown_030042D4 - mov r10, r0 - ldr r1, _0801200C @ =gUnknown_02024C0C - mov r12, r1 - ldr r3, _08012010 @ =sub_8012324 - mov r8, r3 - ldrb r0, [r4] - cmp r2, r0 - bge _08011FC2 - ldr r7, _08012014 @ =gUnknown_02024C18 - movs r6, 0xFF - movs r5, 0 - ldr r3, _08012018 @ =gUnknown_02024C60 -_08011FAE: - adds r1, r2, r7 - ldrb r0, [r1] - orrs r0, r6 - strb r0, [r1] - strh r5, [r3] - adds r3, 0x2 - adds r2, 0x1 - ldrb r1, [r4] - cmp r2, r1 - blt _08011FAE -_08011FC2: - ldr r0, _08012004 @ =0x02000000 - movs r1, 0x6 - movs r2, 0x3 - ldr r3, _0801201C @ =0x0001606b - adds r0, r3 -_08011FCC: - strb r1, [r0] - subs r0, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _08011FCC - mov r0, r12 - ldrb r1, [r0] - ldr r0, _08012020 @ =0x000160a6 - add r0, r9 - strb r1, [r0] - mov r1, r8 - mov r2, r10 - str r1, [r2] - bl Random - ldr r1, _08012024 @ =gUnknown_02024D1C - strh r0, [r1] -_08011FEE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08011FFC: .4byte gUnknown_030042E0 -_08012000: .4byte gUnknown_02024A68 -_08012004: .4byte 0x02000000 -_08012008: .4byte gUnknown_030042D4 -_0801200C: .4byte gUnknown_02024C0C -_08012010: .4byte sub_8012324 -_08012014: .4byte gUnknown_02024C18 -_08012018: .4byte gUnknown_02024C60 -_0801201C: .4byte 0x0001606b -_08012020: .4byte 0x000160a6 -_08012024: .4byte gUnknown_02024D1C - thumb_func_end sub_8011E8C - - thumb_func_start sub_8012028 -sub_8012028: @ 8012028 - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, _0801204C @ =gBattleMons - ldr r0, _08012050 @ =gUnknown_02024A60 - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2E] - cmp r0, 0xAF - bne _08012058 - ldr r1, _08012054 @ =gEnigmaBerries - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x7] - b _08012062 - .align 2, 0 -_0801204C: .4byte gBattleMons -_08012050: .4byte gUnknown_02024A60 -_08012054: .4byte gEnigmaBerries -_08012058: - ldrh r0, [r1, 0x2E] - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r2, r0, 24 -_08012062: - ldr r1, _0801217C @ =gUnknown_02024C0B - ldr r3, _08012180 @ =gUnknown_02024A60 - ldrb r0, [r3] - strb r0, [r1] - cmp r2, 0x25 - bne _08012070 - b _080121F4 -_08012070: - ldr r0, _08012184 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0801207E - b _080121F4 -_0801207E: - ldr r1, _08012188 @ =gBattleMons - ldrb r2, [r3] - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x32 - bne _08012092 - b _080121F4 -_08012092: - adds r0, r2, 0 - bl battle_side_get_owner - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - ldr r0, _0801218C @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r5, r0 - bge _08012126 - movs r7, 0 -_080120A8: - lsrs r4, r7, 24 - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - beq _080120CC - ldr r1, _08012188 @ =gBattleMons - movs r0, 0x58 - muls r0, r5 - adds r0, r1 - adds r2, r0, 0 - adds r2, 0x20 - ldrb r0, [r2] - cmp r0, 0x17 - bne _080120CC - b _080121FC -_080120CC: - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - beq _08012116 - ldr r3, _08012188 @ =gBattleMons - ldr r0, _08012180 @ =gUnknown_02024A60 - ldrb r0, [r0] - movs r2, 0x58 - muls r0, r2 - adds r1, r0, r3 - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0x1A - beq _08012116 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08012116 - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x2 - beq _08012116 - adds r0, r5, 0 - muls r0, r2 - adds r0, r3 - adds r2, r0, 0 - adds r2, 0x20 - ldrb r0, [r2] - cmp r0, 0x47 - bne _08012116 - b _08012220 -_08012116: - movs r0, 0x80 - lsls r0, 17 - adds r7, r0 - adds r5, 0x1 - ldr r0, _0801218C @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r5, r0 - blt _080120A8 -_08012126: - ldr r4, _08012180 @ =gUnknown_02024A60 - ldrb r1, [r4] - movs r0, 0 - str r0, [sp] - movs r0, 0xF - movs r2, 0x2A - movs r3, 0 - bl sub_8018324 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _080121A0 - ldr r6, _08012188 @ =gBattleMons - ldrb r0, [r4] - movs r3, 0x58 - muls r0, r3 - adds r1, r0, r6 - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - cmp r0, 0x8 - beq _0801215E - adds r0, r1, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0x8 - bne _080121A0 -_0801215E: - ldr r0, _08012190 @ =0x02000000 - subs r1, r5, 0x1 - ldr r2, _08012194 @ =0x00016003 - adds r0, r2 - strb r1, [r0] - ldr r2, _08012198 @ =byte_2024C06 - adds r0, r1, 0 - muls r0, r3 - adds r0, r6 - adds r0, 0x20 - ldrb r0, [r0] - strb r0, [r2] - ldr r1, _0801219C @ =gUnknown_02024D1E - movs r0, 0x2 - b _08012248 - .align 2, 0 -_0801217C: .4byte gUnknown_02024C0B -_08012180: .4byte gUnknown_02024A60 -_08012184: .4byte gBattleTypeFlags -_08012188: .4byte gBattleMons -_0801218C: .4byte gUnknown_02024A68 -_08012190: .4byte 0x02000000 -_08012194: .4byte 0x00016003 -_08012198: .4byte byte_2024C06 -_0801219C: .4byte gUnknown_02024D1E -_080121A0: - ldr r1, _080121D4 @ =gBattleMons - ldr r0, _080121D8 @ =gUnknown_02024A60 - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r0, r1 - ldr r0, [r0] - ldr r1, _080121DC @ =0x0400e000 - ands r0, r1 - cmp r0, 0 - bne _080121CA - ldr r1, _080121E0 @ =gUnknown_02024C98 - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 3 - ands r0, r1 - cmp r0, 0 - beq _080121E8 -_080121CA: - ldr r1, _080121E4 @ =gUnknown_02024D1E - movs r0, 0 - strb r0, [r1, 0x5] - movs r0, 0x1 - b _0801224A - .align 2, 0 -_080121D4: .4byte gBattleMons -_080121D8: .4byte gUnknown_02024A60 -_080121DC: .4byte 0x0400e000 -_080121E0: .4byte gUnknown_02024C98 -_080121E4: .4byte gUnknown_02024D1E -_080121E8: - ldr r0, _080121F8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08012244 -_080121F4: - movs r0, 0 - b _0801224A - .align 2, 0 -_080121F8: .4byte gBattleTypeFlags -_080121FC: - ldr r0, _08012210 @ =0x02000000 - ldr r1, _08012214 @ =0x00016003 - adds r0, r1 - strb r5, [r0] - ldr r1, _08012218 @ =byte_2024C06 - ldrb r0, [r2] - strb r0, [r1] - ldr r1, _0801221C @ =gUnknown_02024D1E - movs r0, 0x2 - b _08012248 - .align 2, 0 -_08012210: .4byte 0x02000000 -_08012214: .4byte 0x00016003 -_08012218: .4byte byte_2024C06 -_0801221C: .4byte gUnknown_02024D1E -_08012220: - ldr r0, _08012234 @ =0x02000000 - ldr r1, _08012238 @ =0x00016003 - adds r0, r1 - strb r5, [r0] - ldr r1, _0801223C @ =byte_2024C06 - ldrb r0, [r2] - strb r0, [r1] - ldr r1, _08012240 @ =gUnknown_02024D1E - movs r0, 0x2 - b _08012248 - .align 2, 0 -_08012234: .4byte 0x02000000 -_08012238: .4byte 0x00016003 -_0801223C: .4byte byte_2024C06 -_08012240: .4byte gUnknown_02024D1E -_08012244: - ldr r1, _08012254 @ =gUnknown_02024D1E - movs r0, 0x1 -_08012248: - strb r0, [r1, 0x5] -_0801224A: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08012254: .4byte gUnknown_02024D1E - thumb_func_end sub_8012028 - - thumb_func_start sub_8012258 -sub_8012258: @ 8012258 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r3, 0 - ldr r7, _080122E4 @ =gUnknown_02024A6A - ldr r4, _080122E8 @ =gUnknown_02038470 - ldr r1, _080122EC @ =0x02000000 - lsls r6, r5, 1 - ldr r2, _080122F0 @ =0x0001606c - adds r0, r5, r2 - adds r0, r6, r0 - adds r2, r0, r1 -_08012270: - adds r1, r3, r4 - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r3, 0x1 - cmp r3, 0x2 - ble _08012270 - adds r0, r6, r7 - ldrb r0, [r0] - bl pokemon_order_func - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r7, _080122EC @ =0x02000000 - ldr r1, _080122F4 @ =0x00016068 - adds r0, r5, r1 - adds r0, r7 - ldrb r0, [r0] - bl pokemon_order_func - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_8094C98 - ldr r0, _080122F8 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080122FC - movs r3, 0 - ldr r2, _080122F0 @ =0x0001606c - movs r0, 0x2 - adds r1, r5, 0 - eors r1, r0 - adds r0, r5, r2 - adds r0, r6, r0 - adds r4, r0, r7 - ldr r5, _080122E8 @ =gUnknown_02038470 - lsls r0, r1, 1 - adds r0, r1 - adds r0, r2 - adds r2, r0, r7 -_080122CC: - adds r0, r3, r5 - ldrb r1, [r0] - strb r1, [r4] - ldrb r0, [r0] - strb r0, [r2] - adds r4, 0x1 - adds r2, 0x1 - adds r3, 0x1 - cmp r3, 0x2 - ble _080122CC - b _08012316 - .align 2, 0 -_080122E4: .4byte gUnknown_02024A6A -_080122E8: .4byte gUnknown_02038470 -_080122EC: .4byte 0x02000000 -_080122F0: .4byte 0x0001606c -_080122F4: .4byte 0x00016068 -_080122F8: .4byte gBattleTypeFlags -_080122FC: - movs r3, 0 - ldr r2, _0801231C @ =0x0001606c - adds r0, r5, r2 - adds r0, r6, r0 - adds r1, r0, r7 - ldr r2, _08012320 @ =gUnknown_02038470 -_08012308: - adds r0, r3, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, 0x1 - adds r3, 0x1 - cmp r3, 0x2 - ble _08012308 -_08012316: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801231C: .4byte 0x0001606c -_08012320: .4byte gUnknown_02038470 - thumb_func_end sub_8012258 - thumb_func_start sub_8012324 sub_8012324: @ 8012324 push {r4-r7,lr} diff --git a/include/battle.h b/include/battle.h index f05c7369d..be474b59f 100644 --- a/include/battle.h +++ b/include/battle.h @@ -124,17 +124,22 @@ struct BattleStruct /* 0x2000000 */ struct UnknownStruct4 { - u8 filler0[0x3]; - u16 unk4; - u16 unk6; - u8 unk8; - u8 unk9; - u8 fillerA[0x9]; - u8 taunt:4; - u8 unkC:4; - u8 fillerD[0x2]; - u8 unk16; - u8 filler17[0x4]; + /*0x00*/ u8 filler0[0x3]; + /*0x04*/ u16 unk4; + /*0x06*/ u16 unk6; + /*0x08*/ u8 unk8; + /*0x09*/ u8 unk9; + /*0x0A*/ u8 unkA; + u8 fillerB[4]; + u8 unkF_0:4; + u8 unkF_4:4; + u8 filler10[3]; + /*0x13*/ u8 taunt:4; + /*0x13*/ u8 unkC:4; + /*0x14*/ u8 unk14; + /*0x15*/ u8 unk15; + /*0x16*/ u8 unk16; + /*0x17*/ u8 filler17[0x4]; }; extern struct UnknownStruct1 unk_2016A00; diff --git a/src/battle_2.c b/src/battle_2.c index a9f0fd57a..f2ce737d6 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -1,4 +1,5 @@ #include "global.h" +#include "asm.h" #include "battle.h" #include "main.h" #include "text.h" @@ -10,6 +11,16 @@ #include "link.h" #include "name_string_util.h" #include "battle_setup.h" +#include "rng.h" +#include "sound.h" +#include "songs.h" +#include "trig.h" +#include "abilities.h" + +struct MonCoords +{ + u8 x, y; +}; struct UnknownStruct5 { @@ -55,35 +66,198 @@ struct UnknownPokemonStruct2 /*0x1D*/ u8 language; }; +struct UnknownStruct9 +{ + u8 unk0; + u16 unk2; +}; + +struct UnknownStruct10 +{ + u8 unk0_0:1; + u8 unk0_1:1; + u8 unk0_2:1; + u8 filler1[1]; + u8 unk2; + u8 unk3; + u8 filler4[8]; +}; + +struct UnknownStruct11 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5_0:1; + u8 unk5_1:1; + u16 unk6; + u8 unk8[10]; + u8 unk12; + u8 unk13; + u8 unk14[10]; + u8 filler1E[2]; + u16 unk20; + u16 unk22; + u16 unk24; + u16 unk26; + u16 unk28; + u8 unk2A[10]; + u8 filler34[2]; + u8 unk36[10]; +}; + +struct UnknownStruct12 +{ + u32 unk0; + u8 filler4[0x54]; +}; + +struct UnknownStruct13 +{ + u32 unk0_0:1; + u32 unk0_1:1; + u32 unk0_2:1; + u32 unk0_3:1; + u32 unk0_4:1; + u32 unk0_5:1; + u32 unk0_6:1; + u32 unk0_7:1; + u32 unk1_0:1; + u32 unk1_1:1; + u32 unk1_2:1; + u32 unk1_3:2; + u32 unk1_5:1; + u32 unk1_6:1; + u32 unk1_7:1; + u32 unk2_0:1; + u32 unk2_1:1; + u32 unk2_2:1; + u32 unk2_3:1; + u8 filler4[12]; +}; + extern const struct UnknownStruct5 gUnknown_081F9674; extern const u8 gUnknown_081F96C8[]; +extern void *const gUnknown_081FAF4C[]; +extern const u16 gUnknown_08D004E0[]; extern const struct Trainer gTrainers[]; extern const u8 gSpeciesNames[][11]; extern const struct BattleMove gBattleMoves[]; +extern const struct MonCoords gMonFrontPicCoords[]; +extern const struct MonCoords gCastformFrontSpriteCoords[]; +extern const struct BaseStats gBaseStats[]; +extern const u32 gBitTable[]; extern u8 ewram[]; #define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0)) #define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4)) +#define ewram16000 (ewram[0x16000]) +#define ewram16001 (ewram[0x16001]) +#define ewram16002 (ewram[0x16002]) +#define ewram16003 (ewram[0x16003]) +#define ewram1600C (ewram[0x1600C]) +#define ewram1600E (ewram[0x1600E]) +#define ewram1601B (ewram[0x1601B]) +#define ewram16020 ((u8 *)(ewram + 0x16020)) +#define ewram16056 (ewram[0x16056]) +#define ewram16058 (ewram[0x16058]) +#define ewram16059 (ewram[0x16059]) +#define ewram16078 (ewram[0x16078]) +#define ewram16084 (ewram[0x16084]) +#define ewram16086 (ewram[0x16086]) +#define ewram16087 (ewram[0x16087]) +#define ewram16088 (ewram[0x16088]) +#define ewram16089 (ewram[0x16089]) +#define ewram160A1 (ewram[0x160A1]) +#define ewram160A6 (ewram[0x160A6]) +#define ewram160AC ((u8 *)(ewram + 0x160AC)) +#define ewram160BC ((u16 *)(ewram + 0x160BC)) // hp +#define ewram160C8 (ewram[0x160C8]) +#define ewram160C9 (ewram[0x160C9]) #define ewram160CB (ewram[0x160CB]) +#define ewram160CC ((u8 *)(ewram + 0x160CC)) +#define ewram160E6 (ewram[0x160E6]) +#define ewram160E8 ((u8 *)(ewram + 0x160E8)) +#define ewram160F0 ((u8 *)(ewram + 0x160F0)) +#define ewram160F9 (ewram[0x160F9]) +#define ewram16100 ((u8 *)(ewram + 0x16100)) +#define ewram16108 ((u8 *)(ewram + 0x16108)) +#define ewram16110 (ewram[0x16110]) +#define ewram16111 (ewram[0x16111]) +#define ewram16113 (ewram[0x16113]) +#define ewram17100 ((u32 *)(ewram + 0x17100)) +#define ewram17130 (ewram[0x17130]) +#define ewram17160 (ewram[0x17160]) +#define ewram17800 ((struct UnknownStruct9 *)(ewram + 0x17800)) +#define ewram17810 ((struct UnknownStruct10 *)(ewram + 0x17810)) #define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000)) extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; +extern u8 gUnknown_02024260[][0x200]; +extern u8 gUnknown_02024A60; +extern u32 gUnknown_02024A64; +extern u8 gUnknown_02024A68; +extern u16 gUnknown_02024A6A[]; +extern u8 gUnknown_02024A7F; +extern u8 gUnknown_02024A7A[]; +extern struct UnknownStruct12 gUnknown_02024AD0[]; +extern u8 gUnknown_02024BE0[]; +extern u16 gUnknown_02024BE6; +extern u8 byte_2024C06; +extern u8 gUnknown_02024C0B; +extern u8 gUnknown_02024C0C; +extern u8 gUnknown_02024C0E; +extern u8 gUnknown_02024C18[]; +extern u16 gUnknown_02024C2C[]; +extern u16 gUnknown_02024C34[]; +extern u16 gUnknown_02024C3C[]; +extern u16 gUnknown_02024C44[]; +extern u16 gUnknown_02024C4C[]; +extern u16 gUnknown_02024C54[]; +extern u8 gUnknown_02024C5C[]; +extern u16 gUnknown_02024C60[]; +extern u32 gUnknown_02024C6C; +extern u8 gUnknown_02024C70[]; +extern u16 gUnknown_02024C7A[]; +extern u8 gUnknown_02024C80[][12]; +extern u32 gUnknown_02024C98[]; +//extern u8 gUnknown_02024CA8[][0x1C]; +extern u16 gUnknown_02024D18; +extern u16 gUnknown_02024D1A; +extern u16 gUnknown_02024D1C; extern u8 gUnknown_02024D1E[]; extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is. +extern u8 gUnknown_02024D26; +extern struct UnknownStruct13 gUnknown_02024D28[]; +extern u8 gUnknown_02024DBC[]; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E60[]; +extern u8 gUnknown_02024E64[]; +extern u8 gUnknown_02038470[]; extern u16 gUnknown_030041B0; extern u16 gUnknown_030041B4; extern u16 gUnknown_030041B8; extern struct Window gUnknown_030041D0; +extern u16 gUnknown_03004200; extern struct Window gUnknown_03004210; +extern u16 gUnknown_03004244; extern struct Window gUnknown_03004250; extern u16 gUnknown_03004240; extern u16 gUnknown_03004280; +extern u32 gUnknown_03004284; extern u16 gUnknown_03004288; extern u16 gUnknown_030042A0; extern u16 gUnknown_030042A4; extern u16 gUnknown_030042C0; extern u16 gUnknown_030042C4; extern MainCallback gUnknown_030042D0; +extern void (*gUnknown_030042D4)(void); +extern struct UnknownStruct11 gUnknown_030042E0; +extern u8 gUnknown_03004324; +extern void (*gUnknown_03004330[])(void); +extern u8 gUnknown_03004340[]; extern struct UnknownStruct6 gUnknown_03004DE0; //extern u16 gUnknown_03004DE0[][0xA0]; // possibly? extern u16 gBattleTypeFlags; @@ -92,6 +266,13 @@ extern u8 gReservedSpritePaletteCount; extern u16 gTrainerBattleOpponent; extern struct BattleEnigmaBerry gEnigmaBerries[]; extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; +extern u8 gBattleMonForms[]; +extern u8 gPlayerMonIndex; +extern u8 gEnemyMonIndex; +extern u16 gBattleWeather; +extern u32 gBattleMoveDamage; +extern struct BattlePokemon gBattleMons[]; +extern u8 gBattleMoveFlags; extern void sub_800B858(void); extern void dp12_8087EA4(void); @@ -106,6 +287,29 @@ extern void sub_800DE30(u8); extern void sub_800B950(void); extern u8 battle_load_something(); extern void OpenPartyMenu(); +extern void sub_8089668(); +extern void sub_800D74C(); +extern void sub_804777C(u8); +extern void sub_8043DFC(); +extern u8 CreateInvisibleSpriteWithCallback(void (*)(struct Sprite *)); +extern void dp01_build_cmdbuf_x00_a_b_0(u8 a, u8 b, u8 c); +extern void dp01_build_cmdbuf_x04_4_4_4(u8 a); +extern void dp01_build_cmdbuf_x07_7_7_7(u8 a); +extern void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c); +extern void dp01_build_cmdbuf_x2E_a(u8 a, u8 b); +extern void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a); +extern void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); +extern void dp01_battle_side_mark_buffer_for_execution(); +extern u8 sub_8090D90(); +extern void sub_800C704(u8, u8, u8); +extern u8 sub_8018324(); +extern u8 sub_801A02C(); +extern u8 sub_8015DFC(); +extern u8 sub_8016558(); +extern u8 sub_80173A4(); +extern u8 sub_80170DC(); +extern u8 ItemId_GetHoldEffect(u16); +extern void sub_8094C98(); void sub_800E7F8(void); void sub_800EC9C(void); @@ -116,6 +320,40 @@ void sub_800F838(struct Sprite *); u8 CreateNPCTrainerParty(struct Pokemon *, u16); void sub_800FCFC(void); void sub_8010824(void); +void sub_80101B8(void); +void c2_081284E0(void); +void sub_8010278(struct Sprite *); +void sub_80102AC(struct Sprite *); +void nullsub_37(struct Sprite *); +void sub_8010320(struct Sprite *); +void sub_8010494(struct Sprite *); +void sub_801053C(struct Sprite *); +void oac_poke_ally_(struct Sprite *); +void nullsub_86(struct Sprite *); +void objc_dp11b_pingpong(struct Sprite *); +void sub_8010874(void); +void bc_8012FAC(void); +void bc_load_battlefield(void); +void sub_8011384(void); +void bc_801333C(void); +void bc_battle_begin_message(void); +void bc_8013568(void); +void sub_8011800(void); +void sub_8011834(void); +void bc_801362C(void); +void sub_8011970(void); +void sub_80119B4(void); +void sub_8011B00(void); +void sub_8011E8C(void); +void sub_8012324(void); +void sub_8012FBC(u8, u8); +u8 b_first_side(); +void sub_801365C(u8); +void sub_801377C(void); +void sub_80138F0(void); +void b_cancel_multi_turn_move_maybe(u8); +void b_std_message(); +void sub_80156DC(); void sub_800E7C4(void) { @@ -565,25 +803,42 @@ void sub_800F298(void) BuildOamBuffer(); switch (gUnknown_02024D1E[0]) { - case 0: - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + case 0: + if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + { + ewram0.unk0 = 1; + ewram0.unk1 = 1; + sub_800E9EC(); + sub_800EAAC(); + SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20); + gUnknown_02024D1E[0]++; + } + break; + case 1: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + u8 taskId; + + ResetBlockReceivedFlags(); + id = 0; + if (gBlockRecvBuffer[0][0] == 0x100) { - ewram0.unk0 = 1; - ewram0.unk1 = 1; - sub_800E9EC(); - sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20); - gUnknown_02024D1E[0]++; + if (playerId == 0) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + id++; } - break; - case 1: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) + if (id == 0) { - u8 taskId; + s32 i; - ResetBlockReceivedFlags(); - id = 0; - if (gBlockRecvBuffer[0][0] == 0x100) + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) + break; + } + if (i == MAX_LINK_PLAYERS) { if (playerId == 0) gBattleTypeFlags |= 12; @@ -593,231 +848,214 @@ void sub_800F298(void) } if (id == 0) { - s32 i; - - for (i = 0; i < MAX_LINK_PLAYERS; i++) + while (id < MAX_LINK_PLAYERS) { - if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) + if (gBlockRecvBuffer[id][0] == 0x0101 && id != playerId) + if (id < playerId) + break; + if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) break; - } - if (i == MAX_LINK_PLAYERS) - { - if (playerId == 0) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; id++; } - if (id == 0) - { - while (id < MAX_LINK_PLAYERS) - { - if (gBlockRecvBuffer[id][0] == 0x0101 && id != playerId) - if (id < playerId) - break; - if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId) - break; - id++; - } - if (id == MAX_LINK_PLAYERS) - gBattleTypeFlags |= 12; - else - gBattleTypeFlags |= 8; - } + if (id == MAX_LINK_PLAYERS) + gBattleTypeFlags |= 12; + else + gBattleTypeFlags |= 8; + } + } + sub_800EB08(); + memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3); + taskId = CreateTask(sub_800DE30, 0); + gTasks[taskId].data[1] = 0x10E; + gTasks[taskId].data[2] = 0x5A; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 1: + gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F; + break; + case 2: + gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; + case 3: + gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; + break; } - sub_800EB08(); - memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3); - taskId = CreateTask(sub_800DE30, 0); - gTasks[taskId].data[1] = 0x10E; - gTasks[taskId].data[2] = 0x5A; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - for (id = 0; id < MAX_LINK_PLAYERS; id++) + } + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + gUnknown_02024D1E[0]++; + goto step_2; + } + break; + case 2: + step_2: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); + gUnknown_02024D1E[0]++; + } + break; + case 3: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; id++) + { + if (id == playerId) { switch (gLinkPlayers[id].lp_field_18) { - case 0: - gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F; - break; - case 1: - gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F; - break; - case 2: - gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; - break; - case 3: - gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6; - break; + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; } } - ZeroPlayerPartyMons(); - ZeroEnemyPartyMons(); - gUnknown_02024D1E[0]++; - goto step_2; - } - break; - case 2: - step_2: - if (sub_8007ECC()) - { - SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); - gUnknown_02024D1E[0]++; - } - break; - case 3: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) - { - ResetBlockReceivedFlags(); - for (id = 0; id < MAX_LINK_PLAYERS; id++) + else { - if (id == playerId) + if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) { switch (gLinkPlayers[id].lp_field_18) { - case 0: - case 3: - memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - case 1: - case 2: - memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; + case 0: + case 3: + memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; } } else { - if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) - || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - case 1: - case 2: - memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - } - } - else + switch (gLinkPlayers[id].lp_field_18) { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - case 1: - case 2: - memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); - break; - } + case 0: + case 3: + memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; + case 1: + case 2: + memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + break; } } } - gUnknown_02024D1E[0]++; } - break; - case 4: - if (sub_8007ECC()) - { - SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon)); - gUnknown_02024D1E[0]++; - } - break; - case 5: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) + gUnknown_02024D1E[0]++; + } + break; + case 4: + if (sub_8007ECC()) + { + SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon)); + gUnknown_02024D1E[0]++; + } + break; + case 5: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; id++) { - ResetBlockReceivedFlags(); - for (id = 0; id < MAX_LINK_PLAYERS; id++) + if (id == playerId) + { + switch (gLinkPlayers[id].lp_field_18) + { + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + } + } + else { - if (id == playerId) + if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) { switch (gLinkPlayers[id].lp_field_18) { - case 0: - case 3: - memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - case 1: - case 2: - memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; + case 0: + case 3: + memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; } } else { - if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) - || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) - { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - case 1: - case 2: - memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - } - } - else + switch (gLinkPlayers[id].lp_field_18) { - switch (gLinkPlayers[id].lp_field_18) - { - case 0: - case 3: - memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - case 1: - case 2: - memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); - break; - } + case 0: + case 3: + memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; + case 1: + case 2: + memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon)); + break; } } } + } - shedinja_something(&gPlayerParty[0]); - shedinja_something(&gPlayerParty[1]); - shedinja_something(&gPlayerParty[2]); - shedinja_something(&gPlayerParty[3]); - shedinja_something(&gPlayerParty[4]); - shedinja_something(&gPlayerParty[5]); + shedinja_something(&gPlayerParty[0]); + shedinja_something(&gPlayerParty[1]); + shedinja_something(&gPlayerParty[2]); + shedinja_something(&gPlayerParty[3]); + shedinja_something(&gPlayerParty[4]); + shedinja_something(&gPlayerParty[5]); - shedinja_something(&gEnemyParty[0]); - shedinja_something(&gEnemyParty[1]); - shedinja_something(&gEnemyParty[2]); - shedinja_something(&gEnemyParty[3]); - shedinja_something(&gEnemyParty[4]); - shedinja_something(&gEnemyParty[5]); + shedinja_something(&gEnemyParty[0]); + shedinja_something(&gEnemyParty[1]); + shedinja_something(&gEnemyParty[2]); + shedinja_something(&gEnemyParty[3]); + shedinja_something(&gEnemyParty[4]); + shedinja_something(&gEnemyParty[5]); - gUnknown_02024D1E[0]++; - } - break; - case 6: - sub_800B950(); gUnknown_02024D1E[0]++; - gUnknown_02024D1E[1] = 0; - gUnknown_02024D1E[2] = 0; - break; - case 7: - if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) + } + break; + case 6: + sub_800B950(); + gUnknown_02024D1E[0]++; + gUnknown_02024D1E[1] = 0; + gUnknown_02024D1E[2] = 0; + break; + case 7: + if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) + { + gUnknown_030042D0 = gMain.callback1; + gMain.callback1 = sub_8010824; + SetMainCallback2(sub_800F808); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gUnknown_030042D0 = gMain.callback1; - gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - { - gTrainerBattleOpponent = 0x800; - gBattleTypeFlags |= BATTLE_TYPE_20; - } + gTrainerBattleOpponent = 0x800; + gBattleTypeFlags |= BATTLE_TYPE_20; } - break; + } + break; } } @@ -842,42 +1080,42 @@ void sub_800F838(struct Sprite *sprite) switch (sprite->data0) { - case 0: - sprite->data0++; - sprite->data1 = 0; - sprite->data2 = 0x281; - sprite->data3 = 0; - sprite->data4 = 1; - // fall through - case 1: - sprite->data4--; - if (sprite->data4 == 0) - { - s32 i; - s32 r2; - s32 r0; + case 0: + sprite->data0++; + sprite->data1 = 0; + sprite->data2 = 0x281; + sprite->data3 = 0; + sprite->data4 = 1; + // fall through + case 1: + sprite->data4--; + if (sprite->data4 == 0) + { + s32 i; + s32 r2; + s32 r0; - sprite->data4 = 2; - r2 = sprite->data1 + sprite->data3 * 32; - r0 = sprite->data2 - sprite->data3 * 32; - for (i = 0; i < 29; i += 2) - { - arr[r2 + i] = 0x3D; - arr[r0 + i] = 0x3D; - } - sprite->data3++; - if (sprite->data3 == 21) - { - sprite->data0++; - sprite->data1 = 32; - } + sprite->data4 = 2; + r2 = sprite->data1 + sprite->data3 * 32; + r0 = sprite->data2 - sprite->data3 * 32; + for (i = 0; i < 29; i += 2) + { + arr[r2 + i] = 0x3D; + arr[r0 + i] = 0x3D; } - break; - case 2: - sprite->data1--; - if (sprite->data1 == 20) - SetMainCallback2(sub_800E7C4); - break; + sprite->data3++; + if (sprite->data3 == 21) + { + sprite->data0++; + sprite->data1 = 32; + } + } + break; + case 2: + sprite->data1--; + if (sprite->data1 == 20) + SetMainCallback2(sub_800E7C4); + break; } } @@ -910,68 +1148,1454 @@ u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) switch (gTrainers[trainerNum].partyFlags) { - case 0: + case 0: + { + struct TrainerPartyMember0 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + break; + } + case 1: + { + struct TrainerPartyMember1 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + for (j = 0; j < 4; j++) { - struct TrainerPartyMember0 *partyData = gTrainers[trainerNum].party; + SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + case 2: + { + struct TrainerPartyMember2 *partyData = gTrainers[trainerNum].party; - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); - break; + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + break; + } + case 3: + { + struct TrainerPartyMember3 *partyData = gTrainers[trainerNum].party; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); + for (j = 0; j < 4; j++) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); } - case 1: + break; + } + } + } + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + } + return gTrainers[trainerNum].partySize; +} + +void sub_800FCD4(void) +{ + if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F ) + REG_BG0CNT = 0x9800; +} + +void sub_800FCFC(void) +{ + Random(); // unused return value + REG_BG0HOFS = gUnknown_030042A4; + REG_BG0VOFS = gUnknown_030042A0; + REG_BG1HOFS = gUnknown_030042C0; + REG_BG1VOFS = gUnknown_030041B4; + REG_BG2HOFS = gUnknown_03004288; + REG_BG2VOFS = gUnknown_03004280; + REG_BG3HOFS = gUnknown_030041B0; + REG_BG3VOFS = gUnknown_030041B8; + REG_WIN0H = gUnknown_030042C4; + REG_WIN0V = gUnknown_03004240; + REG_WIN1H = gUnknown_03004200; + REG_WIN1V = gUnknown_03004244; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_8089668(); +} + +void nullsub_36(struct Sprite *sprite) +{ +} + +void sub_800FDB0(struct Sprite *sprite) +{ + if (sprite->data0 != 0) + sprite->pos1.x = sprite->data1 + ((sprite->data2 & 0xFF00) >> 8); + else + sprite->pos1.x = sprite->data1 - ((sprite->data2 & 0xFF00) >> 8); + sprite->data2 += 0x180; + if (sprite->affineAnimEnded) + { + FreeSpriteTilesByTag(0x2710); + FreeSpritePaletteByTag(0x2710); + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +void sub_800FE20(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_800FDB0; + PlaySE(SE_BT_START); +} + +void sub_800FE40(u8 taskId) +{ + struct Pokemon *sp4 = NULL; + struct Pokemon *sp8 = NULL; + u8 r2 = ewram160CB; + u32 r7; + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + switch (gLinkPlayers[r2].lp_field_18) + { + case 0: + case 2: + sp4 = gPlayerParty; + sp8 = gEnemyParty; + break; + case 1: + case 3: + sp4 = gEnemyParty; + sp8 = gPlayerParty; + break; + } + } + else + { + sp4 = gPlayerParty; + sp8 = gEnemyParty; + } + + r7 = 0; + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&sp4[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&sp4[i], MON_DATA_HP); + u32 status = GetMonData(&sp4[i], MON_DATA_STATUS); + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + + if (species == 0) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[3] = r7; + + r7 = 0; + for (i = 0; i < 6; i++) + { + u16 species = GetMonData(&sp8[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&sp8[i], MON_DATA_HP); + u32 status = GetMonData(&sp8[i], MON_DATA_STATUS); + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + + if (species == 0) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + + if (species == 0) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[4] = r7; +} + +void c2_8011A1C(void) +{ + s32 i; + u8 taskId; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + REG_MOSAIC = 0; + REG_WIN0H = 0xF0; + REG_WIN0V = 0x5051; + REG_WININ = 0; + REG_WINOUT = 0; + gUnknown_030042C4 = 0xF0; + gUnknown_03004240 = 0x5051; + dp12_8087EA4(); + + for (i = 0; i < 80; i++) + { + gUnknown_03004DE0.unk0[i] = 0xF0; + gUnknown_03004DE0.unk780[i] = 0xF0; + } + for (i = 80; i < 160; i++) + { + asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter + gUnknown_03004DE0.unk0[i] = 0xFF10; + gUnknown_03004DE0.unk780[i] = 0xFF10; + } + SetUpWindowConfig(&gWindowConfig_81E6C58); + ResetPaletteFade(); + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + gUnknown_03004288 = 0; + gUnknown_03004280 = 0; + gUnknown_030041B0 = 0; + gUnknown_030041B8 = 0; + + InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); + InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); + sub_800D6D4(); + LoadCompressedPalette(gUnknown_08D004E0, 0, 64); + sub_800D74C(); + ResetSpriteData(); + ResetTasks(); + sub_800E23C(); + REG_WINOUT = 0x37; + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(sub_800FCFC); + taskId = CreateTask(sub_800DE30, 0); + gTasks[taskId].data[1] = 0x10E; + gTasks[taskId].data[2] = 0x5A; + gTasks[taskId].data[5] = 1; + sub_800FE40(taskId); + SetMainCallback2(sub_80101B8); + gUnknown_02024D1E[0] = 0; +} + +void sub_80101B8(void) +{ + c2_081284E0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + RunTasks(); +} + +void c2_081284E0(void) +{ + switch (gUnknown_02024D1E[0]) + { + case 0: + gUnknown_02024D1E[1] = 0xFF; + gUnknown_02024D1E[0]++; + break; + case 1: + gUnknown_02024D1E[1]--; + if (gUnknown_02024D1E[1] == 0) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gUnknown_02024D1E[0]++; + } + break; + case 2: + if (!gPaletteFade.active) + SetMainCallback2(gMain.savedCallback); + break; + } +} + +void oac_poke_opponent(struct Sprite *sprite) +{ + sprite->callback = sub_8010278; + StartSpriteAnimIfDifferent(sprite, 0); + BeginNormalPaletteFade(0x00020000, 0, 10, 10, 0x3DEF); +} + +void sub_8010278(struct Sprite *sprite) +{ + if ((gUnknown_02024DE8 & 1) == 0) + { + sprite->pos2.x += 2; + if (sprite->pos2.x == 0) + { + sprite->callback = sub_80102AC; + PlayCry1(sprite->data2, 25); + } + } +} + +void sub_80102AC(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + sub_804777C(sprite->data0); + sub_8043DFC(gUnknown_03004340[sprite->data0]); + sprite->callback = nullsub_37; + StartSpriteAnimIfDifferent(sprite, 0); + BeginNormalPaletteFade(0x00020000, 0, 10, 0, 0x3DEF); + } +} + +void nullsub_37(struct Sprite *sprite) +{ +} + +void unref_sub_801030C(struct Sprite *sprite) +{ + sprite->data3 = 6; + sprite->data4 = 1; + sprite->callback = sub_8010320; +} + +void sub_8010320(struct Sprite *sprite) +{ + sprite->data4--; + if (sprite->data4 == 0) + { + sprite->data4 = 8; + sprite->invisible ^= 1; + sprite->data3--; + if (sprite->data3 == 0) + { + sprite->invisible = FALSE; + sprite->callback = nullsub_37; + gUnknown_03004284 = 0; + } + } +} + +void sub_8010384(struct Sprite *sprite) +{ + u8 r6 = sprite->data0; + u16 species; + u8 yOffset; + + if (ewram17800[r6].unk2 != 0) + species = ewram17800[r6].unk2; + else + species = sprite->data2; + + GetMonData(&gEnemyParty[gUnknown_02024A6A[r6]], MON_DATA_PERSONALITY); // Unused return value + + if (species == SPECIES_UNOWN) + { + u32 personalityValue = GetMonData(&gEnemyParty[gUnknown_02024A6A[r6]], MON_DATA_PERSONALITY); + u16 unownForm = ((((personalityValue & 0x3000000) >> 18) | ((personalityValue & 0x30000) >> 12) | ((personalityValue & 0x300) >> 6) | (personalityValue & 3)) % 0x1C); + u16 unownSpecies; + + if (unownForm == 0) + unownSpecies = SPECIES_UNOWN; // Use the A Unown form + else + unownSpecies = NUM_SPECIES + unownForm; // Use one of the other Unown letters + + yOffset = gMonFrontPicCoords[unownSpecies].y; + } + else if (species == SPECIES_CASTFORM) + { + yOffset = gCastformFrontSpriteCoords[gBattleMonForms[r6]].y; + } + else if (species > NUM_SPECIES) + { + yOffset = gMonFrontPicCoords[SPECIES_NONE].y; + } + else + { + yOffset = gMonFrontPicCoords[species].y; + } + + sprite->data3 = 8 - yOffset / 8; + sprite->data4 = 1; + sprite->callback = sub_8010494; +} + +void sub_8010494(struct Sprite *sprite) +{ + s32 i; + + sprite->data4--; + if (sprite->data4 == 0) + { + sprite->data4 = 2; + sprite->pos2.y += 8; + sprite->data3--; + if (sprite->data3 < 0) + { + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } + else + { + u8 *dst = (u8 *)gUnknown_081FAF4C[battle_get_per_side_status(sprite->data0)] + (gBattleMonForms[sprite->data0] << 11) + (sprite->data3 << 8); + + for (i = 0; i < 0x100; i++) + *(dst++) = 0; + StartSpriteAnim(sprite, gBattleMonForms[sprite->data0]); + } + } +} + +void sub_8010520(struct Sprite *sprite) +{ + sprite->data3 = 8; + sprite->data4 = sprite->invisible; + sprite->callback = sub_801053C; +} + +void sub_801053C(struct Sprite *sprite) +{ + sprite->data3--; + if (sprite->data3 == 0) + { + sprite->invisible ^= 1; + sprite->data3 = 8; + } +} + +void sub_8010574(struct Sprite *sprite) +{ + sprite->invisible = sprite->data4; + sprite->data4 = FALSE; + sprite->callback = nullsub_37; +} + +void sub_80105A0(struct Sprite *sprite) +{ + sprite->callback = oac_poke_ally_; +} + +void oac_poke_ally_(struct Sprite *sprite) +{ + if ((gUnknown_02024DE8 & 1) == 0) + { + sprite->pos2.x -= 2; + if (sprite->pos2.x == 0) + { + sprite->callback = nullsub_86; + sprite->data1 = 0; + } + } +} + +void sub_80105DC(struct Sprite *sprite) +{ + sprite->callback = nullsub_86; +} + +void nullsub_86(struct Sprite *sprite) +{ +} + +void sub_80105EC(struct Sprite *sprite) +{ + if ((gUnknown_02024DE8 & 1) == 0) + { + sprite->pos2.x += sprite->data1; + sprite->pos2.y += sprite->data2; + } +} + +void dp11b_obj_instanciate(u8 a, u8 b, s8 c, s8 d) +{ + u8 spriteId; + u8 r7; + + if (b) + { + if (ewram17810[a].unk0_1) + return; + } + else + { + if (ewram17810[a].unk0_2) + return; + } + + spriteId = CreateInvisibleSpriteWithCallback(objc_dp11b_pingpong); + if (b == TRUE) + { + r7 = gUnknown_03004340[a]; + ewram17810[a].unk2 = spriteId; + ewram17810[a].unk0_1 = 1; + gSprites[spriteId].data0 = 0x80; + } + else + { + r7 = gUnknown_02024BE0[a]; + ewram17810[a].unk3 = spriteId; + ewram17810[a].unk0_2 = 1; + gSprites[spriteId].data0 = 0xC0; + } + gSprites[spriteId].data1 = c; + gSprites[spriteId].data2 = d; + gSprites[spriteId].data3 = r7; + gSprites[spriteId].data4 = b; + gSprites[r7].pos2.x = 0; + gSprites[r7].pos2.y = 0; +} + +void dp11b_obj_free(u8 a, u8 b) +{ + u8 r4; + + if (b == TRUE) + { + if (!ewram17810[a].unk0_1) + return; + r4 = gSprites[ewram17810[a].unk2].data3; + DestroySprite(&gSprites[ewram17810[a].unk2]); + ewram17810[a].unk0_1 = 0; + } + else + { + if (!ewram17810[a].unk0_2) + return; + r4 = gSprites[ewram17810[a].unk3].data3; + DestroySprite(&gSprites[ewram17810[a].unk3]); + ewram17810[a].unk0_2 = 0; + } + gSprites[r4].pos2.x = 0; + gSprites[r4].pos2.y = 0; +} + +void objc_dp11b_pingpong(struct Sprite *sprite) +{ + u8 spriteId = sprite->data3; + s32 var; + + if (sprite->data4 == 1) + var = sprite->data0; + else + var = sprite->data0; + + gSprites[spriteId].pos2.y = Sin(var, sprite->data2) + sprite->data2; + sprite->data0 = (sprite->data0 + sprite->data1) & 0xFF; +} + +void nullsub_41(void) +{ +} + +void sub_8010800(void) +{ + sub_8010874(); + gUnknown_02024D1E[1] = 0; + gUnknown_030042D4 = bc_8012FAC; +} + +void sub_8010824(void) +{ + gUnknown_030042D4(); + gUnknown_02024A60 = 0; + + for (gUnknown_02024A60 = 0; gUnknown_02024A60 < gUnknown_02024A68; gUnknown_02024A60++) + gUnknown_03004330[gUnknown_02024A60](); +} + +void sub_8010874(void) +{ + s32 i; + s32 j; + u8 *r4; + + sub_801365C(0); + sub_801377C(); + + for (i = 0; i < 4; i++) + { + gUnknown_02024C98[i] = 0; + + r4 = (u8 *)&gUnknown_02024CA8[i]; + for (j = 0; j < (u32)0x1C; j++) + r4[j] = 0; + + gUnknown_02024CA8[i].unk16 = 2; + gUnknown_02024C70[i] = 0; + gUnknown_02024C34[i] = 0; + gUnknown_02024C3C[i] = 0; + gUnknown_02024C44[i] = 0; + gUnknown_02024C4C[i] = 0; + gUnknown_02024C5C[i] = 0xFF; + gUnknown_02024C54[i] = 0; + gUnknown_02024C2C[i] = 0; + ewram17100[i] = 0; + } + + for (i = 0; i < 2; i++) + { + gUnknown_02024C7A[i] = 0; + + r4 = (u8 *)&gUnknown_02024C80[i]; + for (j = 0; j < (u32)12; j++) + r4[j] = 0; + } + + gPlayerMonIndex = 0; + gEnemyMonIndex = 0; + gBattleWeather = 0; + + r4 = (u8 *)&gUnknown_02024DBC; + for (i = 0; i < (u32)0x2C; i++) + r4[i] = 0; + + gUnknown_02024C6C = 0; + if ((gBattleTypeFlags & 2) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) + gUnknown_02024C6C = 0x80; + ewram16084 = gSaveBlock2.optionsBattleStyle; + gUnknown_02024C0E = 0; + gUnknown_02024D26 = 0; + gUnknown_02024A64 = 0; + gUnknown_02024D1A = 0; + ewram17130 = 0; + ewram17160 = 0; + for (i = 0; i < 8; i++) + gUnknown_02024D1E[i] = 0; + gUnknown_02024D18 = 0; + gBattleMoveDamage = 0; + gUnknown_02024DE8 = 0; + ewram16002 = 0; + ewram160A1 = 0; + gUnknown_03004324 = 0; + gUnknown_02024C0C = 0; + ewram16078 = 0; + ewram16086 = 0; + ewram16087 = 0; + ewram16089 = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; + ewram16088 = 3; + ewram1601B = 0; + ewram16056 = 1; + + for (i = 0; i < 8; i++) + { + ewram[i + 0x160AC] = 0; + ewram[i + 0x160CC] = 0; + ewram[i + 0x160E8] = 0; + ewram[i + 0x160F0] = 0; + ewram[i + 0x16100] = 0; + ewram[i + 0x16108] = 0; + } + + ewram160C8 = 6; + ewram160C9 = 6; + ewram16113 = 0; + for (i = 0; i < 11; i++) + gUnknown_030042E0.unk36[i] = 0; + gUnknown_030042E0.unk13 = 0; + gUnknown_030042E0.unk0 = 0; + gUnknown_030042E0.unk1 = 0; + gUnknown_030042E0.unk2 = 0; + gUnknown_030042E0.unk3 = 0; + gUnknown_030042E0.unk4 = 0; + gUnknown_030042E0.unk5_0 = 0; + gUnknown_030042E0.unk5_1 = 0; + gUnknown_030042E0.unk20 = 0; + gUnknown_030042E0.unk22 = 0; + gUnknown_030042E0.unk24 = 0; + gUnknown_030042E0.unk6 = 0; + gUnknown_030042E0.unk26 = 0; + gUnknown_030042E0.unk28 = 0; + for (i = 0; i < 10; i++) + { + gUnknown_030042E0.unk8[i] = 0; + gUnknown_030042E0.unk14[i] = 0; + gUnknown_030042E0.unk2A[i] = 0; + } +} + +void sub_8010B88(void) +{ + struct UnknownStruct4 sp0 = gUnknown_02024CA8[gUnknown_02024A60]; + s32 i; + u8 *ptr; + u32 *ptr2; + + if (gBattleMoves[gUnknown_02024BE6].effect != 0x7F) + { + for (i = 0; i < 8; i++) + gBattleMons[gUnknown_02024A60].statStages[i] = 6; + for (i = 0; i < gUnknown_02024A68; i++) + { + struct UnknownStruct12 *sp20 = &gUnknown_02024AD0[i]; + + if ((sp20->unk0 & 0x04000000) && gUnknown_02024CA8[i].unk14 == gUnknown_02024A60) + sp20->unk0 &= ~0x04000000; + if ((gUnknown_02024C98[i] & 0x18) && gUnknown_02024CA8[i].unk15 == gUnknown_02024A60) + { + gUnknown_02024C98[i] &= ~0x18; + gUnknown_02024CA8[i].unk15 = 0; + } + } + } + if (gBattleMoves[gUnknown_02024BE6].effect == 0x7F) + { + gBattleMons[gUnknown_02024A60].status2 &= 0x15100007; + gUnknown_02024C98[gUnknown_02024A60] &= 0x3043F; + + for (i = 0; i < gUnknown_02024A68; i++) + { + if (battle_side_get_owner(gUnknown_02024A60) != battle_side_get_owner(i) + && (gUnknown_02024C98[i] & 0x18) != 0 + && (gUnknown_02024CA8[i].unk15 == gUnknown_02024A60)) + { + gUnknown_02024C98[i] &= ~0x18; + gUnknown_02024C98[i] |= 0x10; + } + } + } + else + { + gBattleMons[gUnknown_02024A60].status2 = 0; + gUnknown_02024C98[gUnknown_02024A60] = 0; + } + + for (i = 0; i < gUnknown_02024A68; i++) + { + if (gUnknown_02024AD0[i].unk0 & (gBitTable[gUnknown_02024A60] << 16)) + gUnknown_02024AD0[i].unk0 &= ~(gBitTable[gUnknown_02024A60] << 16); + if ((gUnknown_02024AD0[i].unk0 & 0xE000) && ewram[0x16020 + i] == gUnknown_02024A60) + gUnknown_02024AD0[i].unk0 &= ~0xE000; + } + + gUnknown_02024E60[gUnknown_02024A60] = 0; + gUnknown_02024E64[gUnknown_02024A60] = 0; + + ptr = (u8 *)&gUnknown_02024CA8[gUnknown_02024A60]; + for (i = 0; i < (u32)0x1C; i++) + ptr[i] = 0; + + if (gBattleMoves[gUnknown_02024BE6].effect == 0x7F) + { + gUnknown_02024CA8[gUnknown_02024A60].unkA = sp0.unkA; + gUnknown_02024CA8[gUnknown_02024A60].unk15 = sp0.unk15; + gUnknown_02024CA8[gUnknown_02024A60].unkF_0 = sp0.unkF_0; + gUnknown_02024CA8[gUnknown_02024A60].unkF_4 = sp0.unkF_4; + } + + gUnknown_02024CA8[gUnknown_02024A60].unk16 = 2; + gUnknown_02024C34[gUnknown_02024A60] = 0; + gUnknown_02024C3C[gUnknown_02024A60] = 0; + gUnknown_02024C44[gUnknown_02024A60] = 0; + gUnknown_02024C4C[gUnknown_02024A60] = 0; + gUnknown_02024C2C[gUnknown_02024A60] = 0; + gUnknown_02024C5C[gUnknown_02024A60] = 0xFF; + + ewram[0x160AC + gUnknown_02024A60 * 2 + 0] = 0; + ewram[0x160AC + gUnknown_02024A60 * 2 + 1] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 0] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 1] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 2] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 3] = 0; + ewram[0x160E8 + gUnknown_02024A60 * 2 + 0] = 0; + ewram[0x160E8 + gUnknown_02024A60 * 2 + 1] = 0; + + ptr2 = (u32 *)(ewram + 0x17100); + ptr2[gUnknown_02024A60] = 0; + + gUnknown_02024BE6 = 0; +} + +void sub_8010F48(void) +{ + s32 i; + u8 *ptr; + u32 *ptr2; + + for (i = 0; i < 8; i++) + gBattleMons[gUnknown_02024A60].statStages[i] = 6; + gBattleMons[gUnknown_02024A60].status2 = 0; + gUnknown_02024C98[gUnknown_02024A60] = 0; + for (i = 0; i < gUnknown_02024A68; i++) + { + if ((gBattleMons[i].status2 & 0x4000000) && gUnknown_02024CA8[i].unk14 == gUnknown_02024A60) + gBattleMons[i].status2 &= ~0x4000000; + if (gBattleMons[i].status2 & (gBitTable[gUnknown_02024A60] << 16)) + gBattleMons[i].status2 &= ~(gBitTable[gUnknown_02024A60] << 16); + if ((gBattleMons[i].status2 & 0xE000) && ewram[0x16020 + i] == gUnknown_02024A60) + gBattleMons[i].status2 &= ~0xE000; + } + gUnknown_02024E60[gUnknown_02024A60] = 0; + gUnknown_02024E64[gUnknown_02024A60] = 0; + + ptr = (u8 *)&gUnknown_02024CA8[gUnknown_02024A60]; + for (i = 0; i < (u32)0x1C; i++) + ptr[i] = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_0 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_1 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_2 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_3 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_4 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_5 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_6 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk0_7 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk1_0 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk1_1 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk1_2 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk1_3 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk1_5 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk1_6 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk1_7 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk2_0 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk2_1 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk2_2 = 0; + gUnknown_02024D28[gUnknown_02024A60].unk2_3 = 0; + + gUnknown_02024CA8[gUnknown_02024A60].unk16 = 2; + gUnknown_02024C34[gUnknown_02024A60] = 0; + gUnknown_02024C3C[gUnknown_02024A60] = 0; + gUnknown_02024C44[gUnknown_02024A60] = 0; + gUnknown_02024C4C[gUnknown_02024A60] = 0; + gUnknown_02024C2C[gUnknown_02024A60] = 0; + gUnknown_02024C5C[gUnknown_02024A60] = 0xFF; + + ewram[0x160E8 + gUnknown_02024A60 * 2 + 0] = 0; + ewram[0x160E8 + gUnknown_02024A60 * 2 + 1] = 0; + ewram[0x160AC + gUnknown_02024A60 * 2 + 0] = 0; + ewram[0x160AC + gUnknown_02024A60 * 2 + 1] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 0] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 1] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 2] = 0; + ewram[0x16100 + gUnknown_02024A60 * 4 + 3] = 0; + + ptr2 = (u32 *)(ewram + 0x17100); + ptr2[gUnknown_02024A60] = 0; + + gBattleMons[gUnknown_02024A60].type1 = gBaseStats[gBattleMons[gUnknown_02024A60].species].type1; + gBattleMons[gUnknown_02024A60].type2 = gBaseStats[gBattleMons[gUnknown_02024A60].species].type2; +} + +void bc_8012FAC(void) +{ + switch (gUnknown_02024D1E[0]) + { + case 0: + gUnknown_02024A60 = gUnknown_02024D1E[1]; + dp01_build_cmdbuf_x00_a_b_0(0, 0, 0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + gUnknown_02024D1E[0]++; + break; + case 1: + if (gUnknown_02024A64 == 0) + { + gUnknown_02024D1E[1]++; + if (gUnknown_02024D1E[1] == gUnknown_02024A68) + gUnknown_030042D4 = bc_load_battlefield; + else + gUnknown_02024D1E[0] = 0; + } + break; + } +} + +void bc_load_battlefield(void) +{ + if (gUnknown_02024A64 == 0) + { + gUnknown_02024A60 = battle_get_side_with_given_state(0); + dp01_build_cmdbuf_x2E_a(0, gBattleTerrain); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + gUnknown_030042D4 = sub_8011384; + gUnknown_02024D1E[0] = 0; + gUnknown_02024D1E[1] = 0; + } +} + +void sub_8011384(void) +{ + u8 *ptr; + s32 i; + + if (gUnknown_02024A64 == 0) + { + for (gUnknown_02024A60 = 0; gUnknown_02024A60 < gUnknown_02024A68; gUnknown_02024A60++) + { + if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) + && battle_side_get_owner(gUnknown_02024A60) == 0) + { + ptr = (u8 *)&gBattleMons[gUnknown_02024A60]; + for (i = 0; i < (u32)0x58; i++) + ptr[i] = 0; + } + else + { + u8 r0; + + ptr = (u8 *)&gBattleMons[gUnknown_02024A60]; + for (i = 0; i < (u32)0x58; i++) + ptr[i] = gUnknown_02024260[gUnknown_02024A60][4 + i]; + + gBattleMons[gUnknown_02024A60].type1 = gBaseStats[gBattleMons[gUnknown_02024A60].species].type1; + gBattleMons[gUnknown_02024A60].type2 = gBaseStats[gBattleMons[gUnknown_02024A60].species].type2; + gBattleMons[gUnknown_02024A60].ability = GetAbilityBySpecies(gBattleMons[gUnknown_02024A60].species, gBattleMons[gUnknown_02024A60].altAbility); + r0 = battle_side_get_owner(gUnknown_02024A60); + ewram160BC[r0] = gBattleMons[gUnknown_02024A60].hp; + for (i = 0; i < 8; i++) + gBattleMons[gUnknown_02024A60].statStages[i] = 6; + gBattleMons[gUnknown_02024A60].status2 = 0; + } + + if (battle_get_per_side_status(gUnknown_02024A60) == 0) + { + dp01_build_cmdbuf_x07_7_7_7(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (battle_get_per_side_status(gUnknown_02024A60) == 1) { - struct TrainerPartyMember1 *partyData = gTrainers[trainerNum].party; + dp01_build_cmdbuf_x07_7_7_7(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + if (battle_side_get_owner(gUnknown_02024A60) == 1 + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) + sub_8090D90(SpeciesToNationalPokedexNum(gBattleMons[gUnknown_02024A60].species), 2); + } + else + { + if (battle_side_get_owner(gUnknown_02024A60) == 1 + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) + { + sub_8090D90(SpeciesToNationalPokedexNum(gBattleMons[gUnknown_02024A60].species), 2); + dp01_build_cmdbuf_x04_4_4_4(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + } + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (battle_get_per_side_status(gUnknown_02024A60) == 2 + || battle_get_per_side_status(gUnknown_02024A60) == 3) + { + dp01_build_cmdbuf_x07_7_7_7(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + } + } + gUnknown_030042D4 = bc_801333C; + } +} - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); +void bc_801333C(void) +{ + s32 i; - for (j = 0; j < 4; j++) - { - SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); - SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); - } - break; + if (gUnknown_02024A64 == 0) + { + struct + { + u16 hp; + u32 status; + } sp0[6]; + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + for (i = 0; i < 6; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == 0 + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + sp0[i].hp = 0xFFFF; + sp0[i].status = 0; } - case 2: + else { - struct TrainerPartyMember2 *partyData = gTrainers[trainerNum].party; + sp0[i].hp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + sp0[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); + } + } + gUnknown_02024A60 = battle_get_side_with_given_state(1); + dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + sp0[i].hp = 0xFFFF; + sp0[i].status = 0; + } + else + { + sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + } + } + gUnknown_02024A60 = battle_get_side_with_given_state(0); + dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); - SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); - break; + gUnknown_030042D4 = bc_battle_begin_message; + } + else + { + // The array gets set here, but nothing is ever done with it. + // Likely unfinished code. + + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == 0 + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + { + sp0[i].hp = 0xFFFF; + sp0[i].status = 0; } - case 3: + else { - struct TrainerPartyMember3 *partyData = gTrainers[trainerNum].party; + sp0[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + sp0[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + } + } - for (j = 0; gSpeciesNames[partyData[i].species][j] != 0xFF; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; - CreateMon(&party[i], partyData[i].species, partyData[i].level, fixedIV, TRUE, personalityValue, 2, 0); + gUnknown_030042D4 = bc_8013568; + } + } +} - SetMonData(&party[i], MON_DATA_HELD_ITEM, (u8 *)&partyData[i].heldItem); - for (j = 0; j < 4; j++) - { - SetMonData(&party[i], MON_DATA_MOVE1 + j, (u8 *)&partyData[i].moves[j]); - SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); - } - break; +void bc_battle_begin_message(void) +{ + if (gUnknown_02024A64 == 0) + { + gUnknown_02024A60 = battle_get_side_with_given_state(1); + b_std_message(0, gUnknown_02024A60); + gUnknown_030042D4 = sub_8011800; + } +} + +void bc_8013568(void) +{ + if (gUnknown_02024A64 == 0) + { + gUnknown_030042D4 = sub_8011970; + b_std_message(0, 0); + } +} + +void sub_8011800(void) +{ + if (gUnknown_02024A64 == 0) + { + b_std_message(1, battle_get_side_with_given_state(1)); + gUnknown_030042D4 = sub_8011834; + } +} + +void sub_8011834(void) +{ + if (gUnknown_02024A64 == 0) + { + for (gUnknown_02024A60 = 0; gUnknown_02024A60 < gUnknown_02024A68; gUnknown_02024A60++) + { + if (battle_get_per_side_status(gUnknown_02024A60) == 1) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) + && battle_get_per_side_status(gUnknown_02024A60) == 3) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + } + gUnknown_030042D4 = bc_801362C; + } +} + +void bc_801362C(void) +{ + if (gUnknown_02024A64 == 0) + { + for (gUnknown_02024A60 = 0; gUnknown_02024A60 < gUnknown_02024A68; gUnknown_02024A60++) + { + if (battle_side_get_owner(gUnknown_02024A60) == 1 + && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK))) + sub_8090D90(SpeciesToNationalPokedexNum(gBattleMons[gUnknown_02024A60].species), 2); + } + gUnknown_030042D4 = sub_8011970; + } +} + +void unref_sub_8011950(void) +{ + if (gUnknown_02024A64 == 0) + gUnknown_030042D4 = sub_8011970; +} + +void sub_8011970(void) +{ + if (gUnknown_02024A64 == 0) + { + if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) + b_std_message(1, battle_get_side_with_given_state(0)); + gUnknown_030042D4 = sub_80119B4; + } +} + +void sub_80119B4(void) +{ + if (gUnknown_02024A64 == 0) + { + for (gUnknown_02024A60 = 0; gUnknown_02024A60 < gUnknown_02024A68; gUnknown_02024A60++) + { + if (battle_get_per_side_status(gUnknown_02024A60) == 0) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) + && battle_get_per_side_status(gUnknown_02024A60) == 2) + { + dp01_build_cmdbuf_x2F_2F_2F_2F(0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + } + ewram16058 = 0; + ewram160F9 = 0; + ewram160E6 = 0; + gUnknown_030042D4 = sub_8011B00; + } +} + +void unref_sub_8011A68(void) +{ + if (gUnknown_02024A64 == 0) + { + for (gUnknown_02024A60 = 0; gUnknown_02024A60 < gUnknown_02024A68; gUnknown_02024A60++) + { + if (battle_side_get_owner(gUnknown_02024A60) == 0) + { + sub_800C704(0, gUnknown_02024A6A[gUnknown_02024A60], 0); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + } + } + ewram16058 = 0; + ewram160F9 = 0; + ewram160E6 = 0; + gUnknown_030042D4 = sub_8011B00; + } +} + +void sub_8011B00(void) +{ + s32 i; + s32 j; + u8 r9 = 0; + + if (gUnknown_02024A64 == 0) + { + if (ewram16058 == 0) + { + for (i = 0; i < gUnknown_02024A68; i++) + gUnknown_02024A7A[i] = i; + for (i = 0; i < gUnknown_02024A68 - 1; i++) + { + for (j = i + 1; j < gUnknown_02024A68; j++) + { + if (b_first_side(gUnknown_02024A7A[i], gUnknown_02024A7A[j], 1) != 0) + sub_8012FBC(i, j); } } } - gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + if (ewram160E6 == 0 && sub_8018324(0, 0, 0, 0xFF, 0) != 0) + { + ewram160E6 = 1; + return; + } + while (ewram16058 < gUnknown_02024A68) + { + if (sub_8018324(0, gUnknown_02024A7A[ewram16058], 0, 0, 0) != 0) + r9++; + ewram16058++; + if (r9 != 0) + return; + } + if (sub_8018324(9, 0, 0, 0, 0) != 0) + return; + if (sub_8018324(11, 0, 0, 0, 0) != 0) + return; + while (ewram160F9 < gUnknown_02024A68) + { + if (sub_801A02C(0, gUnknown_02024A7A[ewram160F9], 0) != 0) + r9++; + ewram160F9++; + if (r9 != 0) + return; + } + // Absolutely pointless for-loop that somehow doesn't get optimized out + for (i = 0; i < gUnknown_02024A68; i++) + ; + for (i = 0; i < 4; i++) + { + ewram[0x16068 + i] = 6; + gUnknown_02024C18[i] = 0xFF; + gUnknown_02024C60[i] = 0; + } + sub_801365C(0); + sub_801377C(); + ewram160A6 = gUnknown_02024C0C; + gUnknown_030042D4 = sub_8012324; + sub_80156DC(); + for (i = 0; i < 8; i++) + gUnknown_02024D1E[i] = 0; + for (i = 0; i < gUnknown_02024A68; i++) + gBattleMons[i].status2 &= ~8; + ewram16000 = 0; + ewram16001 = 0; + ewram16110 = 0; + ewram16111 = 0; + ewram1600C = 0; + ewram16059 = 0; + ewram1600E = 0; + gBattleMoveFlags = 0; + gUnknown_02024D1C = Random(); } - return gTrainers[trainerNum].partySize; -}
\ No newline at end of file +} + +void bc_8013B1C(void) +{ + s32 i; + + if (gUnknown_02024A64 == 0) + { + gUnknown_030042D4 = sub_8011E8C; + for (i = 0; i < 8; i++) + gUnknown_02024D1E[i] = 0; + for (i = 0; i < gUnknown_02024A68; i++) + { + gBattleMons[i].status2 &= ~8; + if ((gBattleMons[i].status1 & 7) && (gBattleMons[i].status2 & 0x1000)) + b_cancel_multi_turn_move_maybe(i); + } + ewram16000 = 0; + ewram16001 = 0; + ewram16110 = 0; + ewram16111 = 0; + ewram1600E = 0; + gBattleMoveFlags = 0; + } +} + +void sub_8011E8C(void) +{ + s32 i; + + sub_801365C(1); + if (gUnknown_02024D26 == 0) + { + if (sub_8015DFC() != 0) + return; + if (sub_8016558() != 0) + return; + } + if (sub_80173A4() != 0) + return; + ewram16059 = 0; + if (sub_80170DC() != 0) + return; + sub_801365C(0); + gUnknown_02024C6C &= ~0x200; + gUnknown_02024C6C &= ~0x80000; + gUnknown_02024C6C &= ~0x400000; + gUnknown_02024C6C &= ~0x100000; + ewram16002 = 0; + ewram160A1 = 0; + ewram1600C = 0; + gBattleMoveDamage = 0; + gBattleMoveFlags = 0; + for (i = 0; i < 5; i++) + gUnknown_02024D1E[i] = 0; + if (gUnknown_02024D26 != 0) + { + gUnknown_02024A7F = 12; + gUnknown_030042D4 = sub_80138F0; + return; + } + if (gUnknown_030042E0.unk13 < 0xFF) + gUnknown_030042E0.unk13++; + for (i = 0; i < gUnknown_02024A68; i++) + { + gUnknown_02024C18[i] = 0xFF; + gUnknown_02024C60[i] = 0; + } + for (i = 0; i < 4; i++) + ewram[0x16068 + i] = 6; + ewram160A6 = gUnknown_02024C0C; + gUnknown_030042D4 = sub_8012324; + gUnknown_02024D1C = Random(); +} + +u8 sub_8012028(void) +{ + u8 r2; + u8 r6; + s32 i; + + if (gBattleMons[gUnknown_02024A60].item == 0xAF) + r2 = gEnigmaBerries[gUnknown_02024A60].holdEffect; + else + r2 = ItemId_GetHoldEffect(gBattleMons[gUnknown_02024A60].item); + gUnknown_02024C0B = gUnknown_02024A60; + if (r2 == 0x25) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return 0; + if (gBattleMons[gUnknown_02024A60].ability == ABILITY_RUN_AWAY) + return 0; + r6 = battle_side_get_owner(gUnknown_02024A60); + for (i = 0; i < gUnknown_02024A68; i++) + { + if (r6 != battle_side_get_owner(i) + && gBattleMons[i].ability == 0x17) + { + ewram16003 = i; + byte_2024C06 = gBattleMons[i].ability; + gUnknown_02024D1E[5] = 2; + return 2; + } + if (r6 != battle_side_get_owner(i) + && gBattleMons[gUnknown_02024A60].ability != ABILITY_LEVITATE + && gBattleMons[gUnknown_02024A60].type1 != 2 + && gBattleMons[gUnknown_02024A60].type2 != 2 + && gBattleMons[i].ability == 0x47) + { + ewram16003 = i; + byte_2024C06 = gBattleMons[i].ability; + gUnknown_02024D1E[5] = 2; + return 2; + } + } + i = sub_8018324(15, gUnknown_02024A60, 0x2A, 0, 0); + if (i != 0 && (gBattleMons[gUnknown_02024A60].type1 == 8 || gBattleMons[gUnknown_02024A60].type2 == 8)) + { + ewram16003 = i - 1; + byte_2024C06 = gBattleMons[i - 1].ability; + gUnknown_02024D1E[5] = 2; + return 2; + } + if ((gBattleMons[gUnknown_02024A60].status2 & 0x0400E000) || (gUnknown_02024C98[gUnknown_02024A60] & 0x400)) + { + gUnknown_02024D1E[5] = 0; + return 1; + } + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) + { + gUnknown_02024D1E[5] = 1; + return 1; + } + return 0; +} + +void sub_8012258(u8 a) +{ + s32 i; + u8 r4; + u8 r1; + + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = ewram[0x1606C + i + a * 3]; + r4 = pokemon_order_func(gUnknown_02024A6A[a]); + r1 = pokemon_order_func(ewram[0x16068 + a]); + sub_8094C98(r4, r1); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + for (i = 0; i < 3; i++) + { + ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; + ewram[0x1606C + i + (a ^ 2) * 3] = gUnknown_02038470[i]; + } + } + else + { + for (i = 0; i < 3; i++) + { + ewram[0x1606C + i + a * 3] = gUnknown_02038470[i]; + } + } +} + +/* +void sub_8012324(void) +{ + u8 r5; + + gUnknown_02024D1E[4] = 0; + // inverted loop + //_0801234C + for (gUnknown_02024A60 = 0; gUnknown_02024A60 < gUnknown_02024A68; gUnknown_02024A60++) + { + r5 = battle_get_per_side_status(gUnknown_02024A60); + switch (gUnknown_02024D1E[gUnknown_02024A60]) + { + case 0: + ewram[0x016068 + gUnknown_02024A60] = 6; + if (!(gBattleTypeFlags & 0x40) + && (r5 & 2) + && !(ewram160A6 & gBitTable[battle_get_side_with_given_state(r5 ^ 2)]) + && gUnknown_02024D1E[battle_get_side_with_given_state(r5)] != 4) + break; + //_080123F8 + if (ewram160A6 & gBitTable[gUnknown_02024A60]) + { + gUnknown_02024C18[gUnknown_02024A60] = 13; + if (!(gBattleTypeFlags & 0x40)) + gUnknown_02024D1E[gUnknown_02024A60] = 4; + //_08012454 + else + gUnknown_02024D1E[gUnknown_02024A60] = 3; + break; + } + //_08012468 + if ((gBattleMons[gUnknown_02024A60].status2 & 0x1000) + || (gBattleMons[gUnknown_02024A60].status2 & 0x10000000)) + { + gUnknown_02024C18[gUnknown_02024A60] = 0; + gUnknown_02024D1E[gUnknown_02024A60] = 3; + } + else + { + dp01_build_cmdbuf_x12_a_bb(0, gUnknown_02024C18[0], gUnknown_02024260[0][1] | (gUnknown_02024260[0][2] << 8)); + dp01_battle_side_mark_buffer_for_execution(gUnknown_02024A60); + gUnknown_02024D1E[gUnknown_02024A60]++; + } + break; + case 1: + } + } +} +*/ diff --git a/src/rom3.c b/src/rom3.c index 0169128cb..ef7b9a7ed 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -582,7 +582,7 @@ void sub_800C47C(u8 taskId) } } -void dp01_build_cmdbuf_x00_a_b_0(u8 a, int b, int c) +void dp01_build_cmdbuf_x00_a_b_0(u8 a, u8 b, u8 c) { gUnknown_03004040[0] = 0; gUnknown_03004040[1] = b; @@ -591,7 +591,7 @@ void dp01_build_cmdbuf_x00_a_b_0(u8 a, int b, int c) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x01_a_b_0(u8 a, int b, int c) +void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c) { gUnknown_03004040[0] = 1; gUnknown_03004040[1] = b; @@ -600,7 +600,7 @@ void dp01_build_cmdbuf_x01_a_b_0(u8 a, int b, int c) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x02_a_b_varargs(u8 a, int b, int c, u8 d, u8 *e) +void dp01_build_cmdbuf_x02_a_b_varargs(u8 a, u8 b, u8 c, u8 d, u8 *e) { int i; @@ -612,7 +612,7 @@ void dp01_build_cmdbuf_x02_a_b_varargs(u8 a, int b, int c, u8 d, u8 *e) dp01_prepare_buffer(a, gUnknown_03004040, d + 3); } -void unref_sub_800C6A4(u8 a, int b, u8 c, u8 *d) +void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d) { int i; @@ -633,7 +633,7 @@ void dp01_build_cmdbuf_x04_4_4_4(u8 a) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void sub_800C704(u8 a, int b, int c) +void sub_800C704(u8 a, u8 b, u8 c) { gUnknown_03004040[0] = 5; gUnknown_03004040[1] = b; @@ -642,7 +642,7 @@ void sub_800C704(u8 a, int b, int c) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x06_a(u8 a, int b) +void dp01_build_cmdbuf_x06_a(u8 a, u8 b) { gUnknown_03004040[0] = 6; gUnknown_03004040[1] = b; @@ -703,7 +703,7 @@ void dp01_build_cmdbuf_x0C_C_C_C(u8 a) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x0D_a(u8 a, int b) +void dp01_build_cmdbuf_x0D_a(u8 a, u8 b) { gUnknown_03004040[0] = 13; gUnknown_03004040[1] = b; @@ -721,7 +721,7 @@ void unref_sub_800C828(u8 a, u8 b, u8 *c) dp01_prepare_buffer(a, gUnknown_03004040, b * 3 + 2); } -void dp01_build_cmdbuf_x0F_aa_b_cc_dddd_e_mlc_weather_00_x1Cbytes(u8 a, u16 b, u8 c, u16 d, int e, u8 f, u8 *g) +void dp01_build_cmdbuf_x0F_aa_b_cc_dddd_e_mlc_weather_00_x1Cbytes(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, u8 *g) { gUnknown_03004040[0] = 15; gUnknown_03004040[1] = b; @@ -1039,7 +1039,7 @@ _0800CB54: .4byte gUnknown_030041C0\n\ .syntax divided\n"); } -void dp01_build_cmdbuf_x12_a_bb(u8 a, int b, u16 c) +void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c) { gUnknown_03004040[0] = 18; gUnknown_03004040[1] = b; @@ -1048,14 +1048,14 @@ void dp01_build_cmdbuf_x12_a_bb(u8 a, int b, u16 c) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void unref_sub_800CB84(u8 a, int b) +void unref_sub_800CB84(u8 a, u8 b) { gUnknown_03004040[0] = 19; gUnknown_03004040[1] = b; dp01_prepare_buffer(a, gUnknown_03004040, 2); } -void sub_800CBA4(u8 a, int b, int c, u8 *d) +void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d) { u32 i; @@ -1078,7 +1078,7 @@ void sub_800CBE0(u8 a, u8 *b) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, int b, int c, int d, u8 *e) +void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, u8 b, u8 c, u8 d, u8 *e) { int i; @@ -1109,7 +1109,7 @@ void dp01_build_cmdbuf_x18_0_aa_health_bar_update(u8 a, s16 b) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x19_a_bb(u8 a, int b, s16 c) +void dp01_build_cmdbuf_x19_a_bb(u8 a, u8 b, s16 c) { gUnknown_03004040[0] = 25; gUnknown_03004040[1] = b; @@ -1132,7 +1132,7 @@ void dp01_build_cmdbuf_x1A_aaaa_bbbb(u8 a, u32 b, u32 c) dp01_prepare_buffer(a, gUnknown_03004040, 9); } -void dp01_build_cmdbuf_x1B_aaaa_b(u8 a, int b, u32 c) +void dp01_build_cmdbuf_x1B_aaaa_b(u8 a, u8 b, u32 c) { gUnknown_03004040[0] = 27; gUnknown_03004040[1] = b; @@ -1143,7 +1143,7 @@ void dp01_build_cmdbuf_x1B_aaaa_b(u8 a, int b, u32 c) dp01_prepare_buffer(a, gUnknown_03004040, 6); } -void dp01_build_cmdbuf_x1C_a(u8 a, int b) +void dp01_build_cmdbuf_x1C_a(u8 a, u8 b) { gUnknown_03004040[0] = 28; gUnknown_03004040[1] = b; @@ -1203,7 +1203,7 @@ void unref_sub_800CE84(u8 a, u16 b, u8 *c) dp01_prepare_buffer(a, gUnknown_03004040, b + 3); } -void dp01_build_cmdbuf_x21_a_bb(u8 a, int b, u16 c) +void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c) { gUnknown_03004040[0] = 33; gUnknown_03004040[1] = b; @@ -1212,7 +1212,7 @@ void dp01_build_cmdbuf_x21_a_bb(u8 a, int b, u16 c) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, int b, u8 *c) +void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c) { int i; @@ -1250,7 +1250,7 @@ void dp01_build_cmdbuf_x25_25_25_25(u8 a) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x26_a(u8 a, int b) +void dp01_build_cmdbuf_x26_a(u8 a, u8 b) { gUnknown_03004040[0] = 38; gUnknown_03004040[1] = b; @@ -1320,7 +1320,7 @@ void dp01_build_cmdbuf_x2D_2D_2D_2D(u8 a) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x2E_a(u8 a, int b) +void dp01_build_cmdbuf_x2E_a(u8 a, u8 b) { gUnknown_03004040[0] = 46; gUnknown_03004040[1] = b; @@ -1367,7 +1367,7 @@ void dp01_build_cmdbuf_x32_32_32_32(u8 a) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x33_a_33_33(u8 a, int b) +void dp01_build_cmdbuf_x33_a_33_33(u8 a, u8 b) { gUnknown_03004040[0] = 51; gUnknown_03004040[1] = b; @@ -1376,7 +1376,7 @@ void dp01_build_cmdbuf_x33_a_33_33(u8 a, int b) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void dp01_build_cmdbuf_x34_a_bb_aka_battle_anim(u8 a, int b, u16 c) +void dp01_build_cmdbuf_x34_a_bb_aka_battle_anim(u8 a, u8 b, u16 c) { gUnknown_03004040[0] = 52; gUnknown_03004040[1] = b; @@ -1385,21 +1385,21 @@ void dp01_build_cmdbuf_x34_a_bb_aka_battle_anim(u8 a, int b, u16 c) dp01_prepare_buffer(a, gUnknown_03004040, 4); } -void sub_800D1D8(u8 a, int b) +void sub_800D1D8(u8 a, u8 b) { gUnknown_03004040[0] = 53; gUnknown_03004040[1] = b; dp01_prepare_buffer(a, gUnknown_03004040, 2); } -void dp01_build_cmdbuf_x38_a(u8 a, int b) +void dp01_build_cmdbuf_x38_a(u8 a, u8 b) { gUnknown_03004040[0] = 54; gUnknown_03004040[1] = b; dp01_prepare_buffer(a, gUnknown_03004040, 2); } -void dp01_build_cmdbuf_x37_a(u8 a, int b) +void dp01_build_cmdbuf_x37_a(u8 a, u8 b) { gUnknown_03004040[0] = 55; gUnknown_03004040[1] = b; diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index b216bbe97..437c62400 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -20,7 +20,6 @@ #define NUM_BATTLE_SLOTS 4 #define gBattleMonPartyPositions gUnknown_02024A6A -#define gCastformFrontSpriteCoords gUnknownCastformCoords_0837F598 #define gCastformElevations gUnknownCastformData_0837F5A8 #define gCastformBackSpriteYCoords gUnknown_0837F5AC #define gTransformPersonalities gUnknown_02024E70 |