diff options
-rw-r--r-- | asm/battle_2.s | 1401 | ||||
-rw-r--r-- | src/battle_2.c | 537 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 1 |
3 files changed, 536 insertions, 1403 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s index f1c865a49..ecb1d0b59 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -6,1407 +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} diff --git a/src/battle_2.c b/src/battle_2.c index a9f0fd57a..f2c0e8bc4 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,14 @@ #include "link.h" #include "name_string_util.h" #include "battle_setup.h" +#include "rng.h" +#include "sound.h" +#include "songs.h" + +struct MonCoords +{ + u8 x, y; +}; struct UnknownStruct5 { @@ -55,35 +64,65 @@ 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]; +}; + 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 u8 ewram[]; #define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0)) #define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4)) #define ewram160CB (ewram[0x160CB]) +#define ewram17800 ((struct UnknownStruct9 *)(ewram + 0x17800)) +#define ewram17810 ((struct UnknownStruct10 *)(ewram + 0x17810)) #define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000)) extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; +extern u16 gUnknown_02024A6A[]; +extern u8 gUnknown_02024BE0[]; extern u8 gUnknown_02024D1E[]; extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is. +extern u16 gUnknown_02024DE8; 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 u8 gUnknown_03004340[]; extern struct UnknownStruct6 gUnknown_03004DE0; //extern u16 gUnknown_03004DE0[][0xA0]; // possibly? extern u16 gBattleTypeFlags; @@ -92,6 +131,7 @@ extern u8 gReservedSpritePaletteCount; extern u16 gTrainerBattleOpponent; extern struct BattleEnigmaBerry gEnigmaBerries[]; extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; +extern u8 gBattleMonForms[]; extern void sub_800B858(void); extern void dp12_8087EA4(void); @@ -106,6 +146,11 @@ 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 *)); void sub_800E7F8(void); void sub_800EC9C(void); @@ -116,6 +161,17 @@ 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_800E7C4(void) { @@ -974,4 +1030,483 @@ u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; } return gTrainers[trainerNum].partySize; -}
\ No newline at end of file +} + +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; +} 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 |