diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-10-16 13:38:21 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-10-17 02:01:07 +0800 |
commit | f03807931fa6451c446dc931cd755c697f7177a4 (patch) | |
tree | 05e5871bf1d02e33f57a5e95905b49e14c90a1d3 | |
parent | a6c0088073949fe3007bf600fd2de8948b3874a7 (diff) |
thru sub_8011B94
-rw-r--r-- | asm/battle_1.s | 16 | ||||
-rw-r--r-- | asm/battle_2.s | 3671 | ||||
-rw-r--r-- | asm/battle_setup.s | 6 | ||||
-rw-r--r-- | asm/link_rfu_2.s | 6 | ||||
-rw-r--r-- | asm/trade.s | 6 | ||||
-rw-r--r-- | include/battle.h | 19 | ||||
-rw-r--r-- | include/battle_bg.h | 3 | ||||
-rw-r--r-- | include/berry.h | 2 | ||||
-rw-r--r-- | include/constants/trainers.h | 2 | ||||
-rw-r--r-- | include/link_rfu.h | 2 | ||||
-rw-r--r-- | include/party_menu.h | 1 | ||||
-rw-r--r-- | src/battle_main.c | 1191 | ||||
-rw-r--r-- | src/berry.c | 4 | ||||
-rw-r--r-- | src/item.c | 2 | ||||
-rw-r--r-- | src/link.c | 2 | ||||
-rw-r--r-- | src/mystery_gift_menu.c | 4 | ||||
-rw-r--r-- | src/quest_log_battle.c | 6 |
17 files changed, 1236 insertions, 3707 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s index f62617600..6db40cb4d 100644 --- a/asm/battle_1.s +++ b/asm/battle_1.s @@ -217,8 +217,8 @@ sub_800F34C: @ 800F34C _0800F37C: .4byte 0x0000b040 thumb_func_end sub_800F34C - thumb_func_start sub_800F380 -sub_800F380: @ 800F380 + thumb_func_start LoadBattleMenuWindowGfx +LoadBattleMenuWindowGfx: @ 800F380 push {r4,r5,lr} movs r0, 0x2 movs r1, 0x12 @@ -278,7 +278,7 @@ _0800F3FC: .4byte 0x0000675a _0800F400: .4byte gPlttBufferFaded + 0xB8 _0800F404: .4byte gBattleTypeFlags _0800F408: .4byte 0x00010010 - thumb_func_end sub_800F380 + thumb_func_end LoadBattleMenuWindowGfx thumb_func_start sub_800F40C sub_800F40C: @ 800F40C @@ -309,7 +309,7 @@ LoadBattleTextboxAndBackground: @ 800F420 movs r1, 0 movs r2, 0x40 bl LoadCompressedPalette - bl sub_800F380 + bl LoadBattleMenuWindowGfx bl sub_800F40C pop {r0} bx r0 @@ -1143,8 +1143,8 @@ _0800FAD8: .4byte 0x000003ff _0800FADC: .4byte 0xfffffc00 thumb_func_end sub_800F6FC - thumb_func_start sub_800FAE0 -sub_800FAE0: @ 800FAE0 + thumb_func_start DrawBattleEntryBackground +DrawBattleEntryBackground: @ 800FAE0 push {r4,lr} ldr r0, _0800FB64 @ =gBattleTypeFlags ldr r1, [r0] @@ -1287,7 +1287,7 @@ _0800FC26: pop {r4} pop {r0} bx r0 - thumb_func_end sub_800FAE0 + thumb_func_end DrawBattleEntryBackground thumb_func_start sub_800FC2C sub_800FC2C: @ 800FC2C @@ -1459,7 +1459,7 @@ _0800FD68: .align 2, 0 _0800FD88: .4byte gUnknown_824EE34 _0800FD8C: - bl sub_800F380 + bl LoadBattleMenuWindowGfx b _0800FD94 _0800FD92: movs r4, 0x1 diff --git a/asm/battle_2.s b/asm/battle_2.s index 13277fc92..39af417fa 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -5,3677 +5,6 @@ .text - thumb_func_start CB2_InitBattle -CB2_InitBattle: @ 800FD9C - push {r4,lr} - bl MoveSaveBlocks_ResetHeap - bl AllocateBattleResources - bl AllocateBattleSpritesData - bl AllocateMonSpritesGfx - ldr r4, _0800FDCC @ =gBattleTypeFlags - ldr r0, [r4] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800FDD8 - bl HandleLinkBattleSetup - ldr r0, _0800FDD0 @ =CB2_PreInitMultiBattle - bl SetMainCallback2 - ldr r1, _0800FDD4 @ =gBattleCommunication - movs r0, 0 - strb r0, [r1] - b _0800FE1C - .align 2, 0 -_0800FDCC: .4byte gBattleTypeFlags -_0800FDD0: .4byte CB2_PreInitMultiBattle -_0800FDD4: .4byte gBattleCommunication -_0800FDD8: - bl CB2_InitBattleInternal - ldr r1, [r4] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0800FE1C - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0800FE06 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - beq _0800FDFE - movs r0, 0x19 - bl HelpSystem_SetSomeVariable2 - b _0800FE1C -_0800FDFE: - movs r0, 0x18 - bl HelpSystem_SetSomeVariable2 - b _0800FE1C -_0800FE06: - movs r0, 0x80 - ands r1, r0 - cmp r1, 0 - beq _0800FE16 - movs r0, 0x1A - bl HelpSystem_SetSomeVariable2 - b _0800FE1C -_0800FE16: - movs r0, 0x17 - bl HelpSystem_SetSomeVariable2 -_0800FE1C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end CB2_InitBattle - - thumb_func_start CB2_InitBattleInternal -CB2_InitBattleInternal: @ 800FE24 - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - str r0, [sp] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _0800FF28 @ =0x05006000 - mov r0, sp - bl CpuSet - movs r0, 0x4C - movs r1, 0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - ldr r4, _0800FF2C @ =0x00005051 - movs r0, 0x44 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - ldr r1, _0800FF30 @ =gBattle_WIN0H - movs r0, 0xF0 - strh r0, [r1] - ldr r0, _0800FF34 @ =gBattle_WIN0V - strh r4, [r0] - bl ScanlineEffect_Clear - ldr r0, _0800FF38 @ =gScanlineEffectRegBuffers - movs r3, 0xF0 - movs r1, 0xF0 - lsls r1, 3 - adds r2, r0, r1 - movs r1, 0x4F -_0800FE88: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _0800FE88 - movs r1, 0x50 - ldr r4, _0800FF3C @ =sIntroScanlineParams16Bit - ldr r0, _0800FF38 @ =gScanlineEffectRegBuffers - ldr r3, _0800FF40 @ =0x0000ff10 - movs r5, 0x82 - lsls r5, 4 - adds r2, r0, r5 - adds r0, 0xA0 -_0800FEA6: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - adds r1, 0x1 - cmp r1, 0x9F - ble _0800FEA6 - ldr r0, [r4] - ldr r1, [r4, 0x4] - ldr r2, [r4, 0x8] - bl ScanlineEffect_SetParams - bl ResetPaletteFade - ldr r0, _0800FF44 @ =gBattle_BG0_X - movs r1, 0 - strh r1, [r0] - ldr r0, _0800FF48 @ =gBattle_BG0_Y - strh r1, [r0] - ldr r0, _0800FF4C @ =gBattle_BG1_X - strh r1, [r0] - ldr r0, _0800FF50 @ =gBattle_BG1_Y - strh r1, [r0] - ldr r0, _0800FF54 @ =gBattle_BG2_X - strh r1, [r0] - ldr r0, _0800FF58 @ =gBattle_BG2_Y - strh r1, [r0] - ldr r0, _0800FF5C @ =gBattle_BG3_X - strh r1, [r0] - ldr r0, _0800FF60 @ =gBattle_BG3_Y - strh r1, [r0] - bl sub_807FC5C - ldr r1, _0800FF64 @ =gBattleTerrain - strb r0, [r1] - bl sub_800F34C - bl LoadBattleTextboxAndBackground - bl ResetSpriteData - bl ResetTasks - bl sub_800FAE0 - bl FreeAllSpritePalettes - ldr r1, _0800FF68 @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _0800FF6C @ =VBlankCB_Battle - bl SetVBlankCallback - bl SetUpBattleVars - ldr r0, _0800FF70 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0800FF78 - ldr r0, _0800FF74 @ =CB2_HandleStartMultiBattle - bl SetMainCallback2 - b _0800FF7E - .align 2, 0 -_0800FF28: .4byte 0x05006000 -_0800FF2C: .4byte 0x00005051 -_0800FF30: .4byte gBattle_WIN0H -_0800FF34: .4byte gBattle_WIN0V -_0800FF38: .4byte gScanlineEffectRegBuffers -_0800FF3C: .4byte sIntroScanlineParams16Bit -_0800FF40: .4byte 0x0000ff10 -_0800FF44: .4byte gBattle_BG0_X -_0800FF48: .4byte gBattle_BG0_Y -_0800FF4C: .4byte gBattle_BG1_X -_0800FF50: .4byte gBattle_BG1_Y -_0800FF54: .4byte gBattle_BG2_X -_0800FF58: .4byte gBattle_BG2_Y -_0800FF5C: .4byte gBattle_BG3_X -_0800FF60: .4byte gBattle_BG3_Y -_0800FF64: .4byte gBattleTerrain -_0800FF68: .4byte gReservedSpritePaletteCount -_0800FF6C: .4byte VBlankCB_Battle -_0800FF70: .4byte gBattleTypeFlags -_0800FF74: .4byte CB2_HandleStartMultiBattle -_0800FF78: - ldr r0, _0800FFCC @ =CB2_HandleStartBattle - bl SetMainCallback2 -_0800FF7E: - ldr r0, _0800FFD0 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0800FF98 - ldr r0, _0800FFD4 @ =gEnemyParty - ldr r1, _0800FFD8 @ =gTrainerBattleOpponent_A - ldrh r1, [r1] - bl CreateNPCTrainerParty - bl SetWildMonHeldItem -_0800FF98: - ldr r0, _0800FFDC @ =gMain - ldr r1, _0800FFE0 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] - ldr r4, _0800FFE4 @ =gPlayerParty - movs r0, 0xFA - lsls r0, 1 - adds r5, r4, r0 -_0800FFAE: - adds r0, r4, 0 - movs r1, 0x3 - bl AdjustFriendship - adds r4, 0x64 - cmp r4, r5 - ble _0800FFAE - movs r1, 0 - ldr r0, _0800FFE8 @ =gBattleCommunication - strb r1, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800FFCC: .4byte CB2_HandleStartBattle -_0800FFD0: .4byte gBattleTypeFlags -_0800FFD4: .4byte gEnemyParty -_0800FFD8: .4byte gTrainerBattleOpponent_A -_0800FFDC: .4byte gMain -_0800FFE0: .4byte 0x00000439 -_0800FFE4: .4byte gPlayerParty -_0800FFE8: .4byte gBattleCommunication - thumb_func_end CB2_InitBattleInternal - - thumb_func_start sub_800FFEC -sub_800FFEC: @ 800FFEC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - mov r9, r6 - movs r0, 0xCE - lsls r0, 1 - mov r10, r0 - mov r8, r6 -_08010002: - movs r0, 0x64 - mov r4, r9 - muls r4, r0 - ldr r0, _080100B0 @ =gPlayerParty - adds r4, r0 - 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 r7, r0, 16 - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - adds r1, r0, 0 - cmp r5, 0 - beq _0801007E - cmp r5, r10 - beq _0801004A - cmp r7, 0 - beq _0801004A - cmp r1, 0 - bne _0801004A - movs r0, 0x1 - mov r2, r8 - lsls r0, r2 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_0801004A: - cmp r5, 0 - beq _0801007E - cmp r7, 0 - beq _08010066 - cmp r5, r10 - beq _0801005A - cmp r1, 0 - beq _08010066 -_0801005A: - movs r0, 0x2 - mov r1, r8 - lsls r0, r1 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_08010066: - cmp r5, 0 - beq _0801007E - cmp r5, r10 - beq _0801007E - cmp r7, 0 - bne _0801007E - movs r0, 0x3 - mov r2, r8 - lsls r0, r2 - orrs r6, r0 - lsls r0, r6, 16 - lsrs r6, r0, 16 -_0801007E: - movs r0, 0x2 - add r8, r0 - movs r1, 0x1 - add r9, r1 - mov r2, r9 - cmp r2, 0x5 - ble _08010002 - ldr r1, _080100B4 @ =gBattleStruct - ldr r0, [r1] - movs r2, 0xC3 - lsls r2, 1 - adds r0, r2 - strb r6, [r0] - ldr r0, [r1] - adds r2, 0x1 - adds r1, r0, r2 - lsrs r0, r6, 8 - strb r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080100B0: .4byte gPlayerParty -_080100B4: .4byte gBattleStruct - thumb_func_end sub_800FFEC - - thumb_func_start SetPlayerBerryDataInBattleStruct -SetPlayerBerryDataInBattleStruct: @ 80100B8 - push {r4-r7,lr} - ldr r0, _08010120 @ =gBattleStruct - ldr r5, [r0] - movs r0, 0xC4 - lsls r0, 1 - adds r4, r5, r0 - bl IsEnigmaBerryValid - cmp r0, 0x1 - bne _08010134 - movs r2, 0 - ldr r7, _08010124 @ =gSaveBlock1Ptr - movs r1, 0xC8 - lsls r1, 1 - adds r5, r1 - adds r6, r7, 0 - ldr r3, _08010128 @ =0x000030ec -_080100DA: - adds r0, r4, r2 - ldr r1, [r6] - adds r1, r3 - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x5 - ble _080100DA - adds r1, r4, r2 - movs r0, 0xFF - strb r0, [r1] - movs r2, 0 - adds r3, r5, 0 - ldr r6, _08010124 @ =gSaveBlock1Ptr - ldr r5, _0801012C @ =0x00003108 -_080100FA: - adds r0, r3, r2 - ldr r1, [r6] - adds r1, r5 - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x11 - ble _080100FA - ldr r0, [r7] - ldr r1, _08010130 @ =0x0000311a - adds r0, r1 - ldrb r0, [r0] - strb r0, [r4, 0x7] - ldr r0, [r7] - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - b _08010174 - .align 2, 0 -_08010120: .4byte gBattleStruct -_08010124: .4byte gSaveBlock1Ptr -_08010128: .4byte 0x000030ec -_0801012C: .4byte 0x00003108 -_08010130: .4byte 0x0000311a -_08010134: - movs r0, 0xAF - bl ItemIdToBerryType - lsls r0, 24 - lsrs r0, 24 - bl sub_809C8A0 - adds r3, r0, 0 - movs r2, 0 - movs r0, 0xC8 - lsls r0, 1 - adds r5, r0 -_0801014C: - adds r0, r4, r2 - adds r1, r3, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x5 - ble _0801014C - adds r1, r4, r2 - movs r0, 0xFF - strb r0, [r1] - adds r0, r5, 0 - movs r2, 0 - adds r1, r0, 0 - adds r1, 0x11 -_08010168: - strb r2, [r1] - subs r1, 0x1 - cmp r1, r0 - bge _08010168 - movs r0, 0 - strb r0, [r4, 0x7] -_08010174: - strb r0, [r4, 0x1A] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end SetPlayerBerryDataInBattleStruct - - thumb_func_start SetAllPlayersBerryData -SetAllPlayersBerryData: @ 801017C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _08010234 @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08010194 - b _080102C0 -_08010194: - bl IsEnigmaBerryValid - cmp r0, 0x1 - bne _08010250 - movs r5, 0 - ldr r3, _08010238 @ =gEnigmaBerries - ldr r0, _0801023C @ =gSaveBlock1Ptr - mov r8, r0 - adds r6, r3, 0 - mov r4, r8 - ldr r2, _08010240 @ =0x000030ec - adds r7, r3, 0 - adds r7, 0x38 -_080101AE: - adds r1, r5, r6 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r5, r7 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r5, 0x1 - cmp r5, 0x5 - ble _080101AE - adds r1, r5, r3 - movs r0, 0xFF - strb r0, [r1] - adds r0, r3, 0 - adds r0, 0x38 - adds r0, r5, r0 - movs r1, 0x1 - negs r1, r1 - strb r1, [r0] - movs r5, 0 - adds r7, r3, 0 - adds r7, 0x8 - ldr r4, _0801023C @ =gSaveBlock1Ptr - ldr r2, _08010244 @ =0x00003108 - adds r6, r3, 0 - adds r6, 0x40 -_080101EC: - adds r1, r5, r7 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r5, r6 - ldr r0, [r4] - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - adds r5, 0x1 - cmp r5, 0x11 - ble _080101EC - mov r1, r8 - ldr r0, [r1] - ldr r2, _08010248 @ =0x0000311a - adds r0, r2 - ldrb r1, [r0] - strb r1, [r3, 0x7] - ldrb r0, [r0] - adds r1, r3, 0 - adds r1, 0x3F - strb r0, [r1] - mov r4, r8 - ldr r0, [r4] - ldr r1, _0801024C @ =0x0000311b - adds r0, r1 - ldrb r1, [r0] - strb r1, [r3, 0x1A] - ldrb r1, [r0] - adds r0, r3, 0 - adds r0, 0x52 - strb r1, [r0] - b _080103FC - .align 2, 0 -_08010234: .4byte gBattleTypeFlags -_08010238: .4byte gEnigmaBerries -_0801023C: .4byte gSaveBlock1Ptr -_08010240: .4byte 0x000030ec -_08010244: .4byte 0x00003108 -_08010248: .4byte 0x0000311a -_0801024C: .4byte 0x0000311b -_08010250: - movs r0, 0xAF - bl ItemIdToBerryType - lsls r0, 24 - lsrs r0, 24 - bl sub_809C8A0 - adds r6, r0, 0 - movs r5, 0 - ldr r4, _080102BC @ =gEnigmaBerries - adds r7, r4, 0 - adds r7, 0x38 - adds r3, r4, 0 -_0801026A: - adds r1, r5, r4 - adds r2, r6, r5 - ldrb r0, [r2] - strb r0, [r1] - adds r1, r5, r7 - ldrb r0, [r2] - strb r0, [r1] - adds r5, 0x1 - cmp r5, 0x5 - ble _0801026A - adds r1, r5, r3 - movs r0, 0xFF - strb r0, [r1] - adds r0, r3, 0 - adds r0, 0x38 - adds r0, r5, r0 - movs r1, 0x1 - negs r1, r1 - strb r1, [r0] - movs r5, 0 - adds r4, r3, 0 - adds r4, 0x8 - movs r1, 0 - adds r2, r3, 0 - adds r2, 0x40 -_0801029C: - adds r0, r5, r4 - strb r1, [r0] - adds r0, r5, r2 - strb r1, [r0] - adds r5, 0x1 - cmp r5, 0x11 - ble _0801029C - movs r1, 0 - strb r1, [r3, 0x7] - adds r0, r3, 0 - adds r0, 0x3F - strb r1, [r0] - strb r1, [r3, 0x1A] - adds r0, 0x13 - strb r1, [r0] - b _080103FC - .align 2, 0 -_080102BC: .4byte gEnigmaBerries -_080102C0: - movs r0, 0x40 - ands r1, r0 - cmp r1, 0 - beq _0801034C - movs r5, 0 - ldr r3, _08010340 @ =gEnigmaBerries - ldr r2, _08010344 @ =gLinkPlayers - mov r9, r2 - adds r6, r3, 0 - movs r4, 0x8 - adds r4, r6 - mov r8, r4 -_080102D8: - lsls r0, r5, 8 - ldr r1, _08010348 @ =gBlockRecvBuffer + 4 - adds r7, r0, r1 - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - add r0, r9 - ldrb r3, [r0, 0x18] - movs r4, 0 - adds r5, 0x1 - mov r10, r5 - lsls r1, r3, 3 - subs r0, r1, r3 - adds r5, r1, 0 - lsls r0, 2 - adds r1, r0, r6 -_080102F8: - adds r0, r7, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r1, 0x1 - adds r4, 0x1 - cmp r4, 0x5 - ble _080102F8 - subs r0, r5, r3 - lsls r0, 2 - adds r1, r4, r0 - adds r1, r6 - movs r2, 0xFF - strb r2, [r1] - movs r4, 0 - mov r2, r8 - adds r1, r0, r2 - adds r2, r7, 0 - adds r2, 0x8 -_0801031C: - adds r0, r2, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r1, 0x1 - adds r4, 0x1 - cmp r4, 0x11 - ble _0801031C - subs r0, r5, r3 - lsls r0, 2 - adds r0, r6 - ldrb r1, [r7, 0x7] - strb r1, [r0, 0x7] - ldrb r1, [r7, 0x1A] - strb r1, [r0, 0x1A] - mov r5, r10 - cmp r5, 0x3 - ble _080102D8 - b _080103FC - .align 2, 0 -_08010340: .4byte gEnigmaBerries -_08010344: .4byte gLinkPlayers -_08010348: .4byte gBlockRecvBuffer + 4 -_0801034C: - movs r5, 0 - ldr r4, _0801040C @ =gEnigmaBerries - mov r9, r4 -_08010352: - lsls r0, r5, 8 - ldr r1, _08010410 @ =gBlockRecvBuffer + 4 - adds r7, r0, r1 - movs r4, 0 - adds r2, r5, 0x1 - mov r10, r2 - lsls r0, r5, 3 - mov r8, r0 - adds r1, r5, 0x2 - mov r12, r1 - subs r1, r0, r5 - mov r2, r12 - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - mov r2, r9 - adds r3, r0, r2 - lsls r1, 2 - adds r2, r1, r2 -_08010378: - adds r0, r7, r4 - ldrb r1, [r0] - strb r1, [r2] - ldrb r0, [r0] - strb r0, [r3] - adds r3, 0x1 - adds r2, 0x1 - adds r4, 0x1 - cmp r4, 0x5 - ble _08010378 - mov r0, r8 - subs r3, r0, r5 - lsls r3, 2 - adds r1, r4, r3 - add r1, r9 - ldrb r0, [r1] - movs r2, 0xFF - orrs r0, r2 - strb r0, [r1] - mov r0, r12 - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 2 - adds r1, r4, r2 - add r1, r9 - ldrb r0, [r1] - movs r4, 0xFF - orrs r0, r4 - strb r0, [r1] - movs r4, 0 - ldr r0, _0801040C @ =gEnigmaBerries - adds r0, 0x8 - adds r2, r0 - adds r3, r0 - adds r6, r7, 0 - adds r6, 0x8 -_080103C0: - adds r0, r6, r4 - ldrb r1, [r0] - strb r1, [r3] - ldrb r0, [r0] - strb r0, [r2] - adds r2, 0x1 - adds r3, 0x1 - adds r4, 0x1 - cmp r4, 0x11 - ble _080103C0 - mov r0, r8 - subs r2, r0, r5 - lsls r2, 2 - add r2, r9 - ldrb r0, [r7, 0x7] - strb r0, [r2, 0x7] - mov r1, r12 - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - add r0, r9 - ldrb r1, [r7, 0x7] - strb r1, [r0, 0x7] - ldrb r1, [r7, 0x1A] - strb r1, [r2, 0x1A] - ldrb r1, [r7, 0x1A] - strb r1, [r0, 0x1A] - mov r5, r10 - cmp r5, 0x1 - ble _08010352 -_080103FC: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801040C: .4byte gEnigmaBerries -_08010410: .4byte gBlockRecvBuffer + 4 - thumb_func_end SetAllPlayersBerryData - - thumb_func_start sub_8010414 -sub_8010414: @ 8010414 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - movs r6, 0 - ldr r0, _08010440 @ =gBlockRecvBuffer - ldrh r2, [r0] - movs r1, 0x80 - lsls r1, 1 - mov r12, r0 - cmp r2, r1 - bne _08010458 - cmp r3, 0 - bne _08010448 - ldr r0, _08010444 @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0xC - b _0801044E - .align 2, 0 -_08010440: .4byte gBlockRecvBuffer -_08010444: .4byte gBattleTypeFlags -_08010448: - ldr r0, _0801048C @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0x8 -_0801044E: - orrs r1, r2 - str r1, [r0] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_08010458: - cmp r6, 0 - bne _080104FC - movs r2, 0 - cmp r2, r4 - bge _0801047C - ldr r1, _08010490 @ =gBlockRecvBuffer - mov r8, r1 - movs r5, 0x80 - lsls r5, 1 -_0801046A: - adds r1, r5 - adds r2, 0x1 - cmp r2, r4 - bge _0801047C - mov r7, r8 - ldrh r0, [r7] - ldrh r7, [r1] - cmp r0, r7 - beq _0801046A -_0801047C: - cmp r2, r4 - bne _080104A4 - cmp r3, 0 - bne _08010494 - ldr r0, _0801048C @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0xC - b _0801049A - .align 2, 0 -_0801048C: .4byte gBattleTypeFlags -_08010490: .4byte gBlockRecvBuffer -_08010494: - ldr r0, _080104EC @ =gBattleTypeFlags - ldr r1, [r0] - movs r2, 0x8 -_0801049A: - orrs r1, r2 - str r1, [r0] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080104A4: - cmp r6, 0 - bne _080104FC - movs r2, 0 - ldr r5, _080104EC @ =gBattleTypeFlags - cmp r2, r4 - bge _080104E2 - mov r0, r12 - ldrh r1, [r0] - ldr r0, _080104F0 @ =0x00000201 - cmp r1, r0 - beq _080104DA -_080104BA: - lsls r0, r2, 8 - add r0, r12 - ldrh r0, [r0] - ldr r1, _080104F0 @ =0x00000201 - cmp r0, r1 - bls _080104CA - cmp r2, r3 - bne _080104E2 -_080104CA: - adds r2, 0x1 - cmp r2, r4 - bge _080104E2 - lsls r0, r2, 8 - add r0, r12 - ldrh r0, [r0] - cmp r0, r1 - bne _080104BA -_080104DA: - cmp r2, r3 - beq _080104BA - cmp r2, r3 - bge _080104BA -_080104E2: - cmp r2, r4 - bne _080104F4 - ldr r0, [r5] - movs r1, 0xC - b _080104F8 - .align 2, 0 -_080104EC: .4byte gBattleTypeFlags -_080104F0: .4byte 0x00000201 -_080104F4: - ldr r0, [r5] - movs r1, 0x8 -_080104F8: - orrs r0, r1 - str r0, [r5] -_080104FC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8010414 - - thumb_func_start CB2_HandleStartBattle -CB2_HandleStartBattle: @ 8010508 - push {r4-r6,lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl GetMultiplayerId - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08010540 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xB5 - strb r4, [r0] - movs r0, 0x1 - adds r5, r4, 0 - eors r5, r0 - ldr r0, _08010544 @ =gBattleCommunication - ldrb r0, [r0] - cmp r0, 0x10 - bls _08010536 - b _080108B8 -_08010536: - lsls r0, 2 - ldr r1, _08010548 @ =_0801054C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08010540: .4byte gBattleStruct -_08010544: .4byte gBattleCommunication -_08010548: .4byte _0801054C - .align 2, 0 -_0801054C: - .4byte _08010590 - .4byte _080105D4 - .4byte _08010670 - .4byte _080106F4 - .4byte _0801071C - .4byte _08010898 - .4byte _080108A4 - .4byte _0801074C - .4byte _08010774 - .4byte _08010898 - .4byte _080108A4 - .4byte _080107A4 - .4byte _080107CC - .4byte _08010898 - .4byte _080108A4 - .4byte _08010834 - .4byte _0801084C -_08010590: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _080105BC - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - bl sub_80357C8 - ldr r1, _080105CC @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1] -_080105BC: - ldr r0, _080105D0 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _080105C6 - b _080108B8 -_080105C6: - bl LoadWirelessStatusIndicatorSpriteGfx - b _080108B8 - .align 2, 0 -_080105CC: .4byte gBattleCommunication -_080105D0: .4byte gWirelessCommType -_080105D4: - ldr r2, _08010640 @ =gBattleTypeFlags - ldr r1, [r2] - movs r6, 0x2 - adds r0, r1, 0 - ands r0, r6 - cmp r0, 0 - beq _08010658 - ldr r0, _08010644 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080105EC - b _080108B8 -_080105EC: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0801062A - ldr r4, _08010648 @ =gBattleStruct - ldr r0, [r4] - movs r5, 0xC2 - lsls r5, 1 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _0801064C @ =0x00000185 - adds r0, r1 - strb r6, [r0] - bl sub_800FFEC - bl SetPlayerBerryDataInBattleStruct - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, r5 - movs r2, 0x20 - bl SendBlock - ldr r0, _08010650 @ =gBattleCommunication - strb r6, [r0] -_0801062A: - ldr r0, _08010654 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _08010634 - b _080108B8 -_08010634: - movs r0, 0 - movs r1, 0 - bl CreateWirelessStatusIndicatorSprite - b _080108B8 - .align 2, 0 -_08010640: .4byte gBattleTypeFlags -_08010644: .4byte gReceivedRemoteLinkPlayers -_08010648: .4byte gBattleStruct -_0801064C: .4byte 0x00000185 -_08010650: .4byte gBattleCommunication -_08010654: .4byte gWirelessCommType -_08010658: - movs r0, 0x4 - orrs r1, r0 - str r1, [r2] - ldr r1, _0801066C @ =gBattleCommunication - movs r0, 0xF - strb r0, [r1] - bl SetAllPlayersBerryData - b _080108B8 - .align 2, 0 -_0801066C: .4byte gBattleCommunication -_08010670: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _0801067E - b _080108B8 -_0801067E: - bl ResetBlockReceivedFlags - movs r0, 0x2 - adds r1, r4, 0 - bl sub_8010414 - bl SetAllPlayersBerryData - ldr r0, _080106E0 @ =sub_800F6FC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080106E4 @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r1 - movs r1, 0 - movs r0, 0x87 - lsls r0, 1 - strh r0, [r2, 0xA] - movs r0, 0x5A - strh r0, [r2, 0xC] - strh r1, [r2, 0x12] - ldr r0, _080106E8 @ =gBattleStruct - ldr r3, [r0] - movs r4, 0xC3 - lsls r4, 1 - adds r0, r3, r4 - ldrb r1, [r0] - adds r4, 0x1 - adds r0, r3, r4 - ldrb r0, [r0] - lsls r0, 8 - orrs r1, r0 - strh r1, [r2, 0xE] - ldr r0, _080106EC @ =gBlockRecvBuffer - lsls r1, r5, 8 - adds r0, 0x2 - adds r1, r0 - ldrh r0, [r1] - strh r0, [r2, 0x10] - bl SetDeoxysStats - ldr r1, _080106F0 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_080106E0: .4byte sub_800F6FC -_080106E4: .4byte gTasks -_080106E8: .4byte gBattleStruct -_080106EC: .4byte gBlockRecvBuffer -_080106F0: .4byte gBattleCommunication -_080106F4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010700 - b _080108B8 -_08010700: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08010714 @ =gPlayerParty - movs r2, 0xC8 - bl SendBlock - ldr r1, _08010718 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010714: .4byte gPlayerParty -_08010718: .4byte gBattleCommunication -_0801071C: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _0801072A - b _080108B8 -_0801072A: - bl ResetBlockReceivedFlags - ldr r0, _08010740 @ =gEnemyParty - lsls r1, r5, 8 - ldr r2, _08010744 @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl memcpy - ldr r1, _08010748 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010740: .4byte gEnemyParty -_08010744: .4byte gBlockRecvBuffer -_08010748: .4byte gBattleCommunication -_0801074C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010758 - b _080108B8 -_08010758: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0801076C @ =gUnknown_202434C - movs r2, 0xC8 - bl SendBlock - ldr r1, _08010770 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_0801076C: .4byte gUnknown_202434C -_08010770: .4byte gBattleCommunication -_08010774: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - beq _08010782 - b _080108B8 -_08010782: - bl ResetBlockReceivedFlags - ldr r0, _08010798 @ =gUnknown_20240F4 - lsls r1, r5, 8 - ldr r2, _0801079C @ =gBlockRecvBuffer - adds r1, r2 - movs r2, 0xC8 - bl memcpy - ldr r1, _080107A0 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010798: .4byte gUnknown_20240F4 -_0801079C: .4byte gBlockRecvBuffer -_080107A0: .4byte gBattleCommunication -_080107A4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _080107B0 - b _080108B8 -_080107B0: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080107C4 @ =gUnknown_2024414 - movs r2, 0xC8 - bl SendBlock - ldr r1, _080107C8 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_080107C4: .4byte gUnknown_2024414 -_080107C8: .4byte gBattleCommunication -_080107CC: - bl GetBlockReceivedStatus - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x3 - bne _080108B8 - bl ResetBlockReceivedFlags - ldr r4, _08010820 @ =gUnknown_20241BC - lsls r1, r5, 8 - ldr r0, _08010824 @ =gBlockRecvBuffer - adds r1, r0 - adds r0, r4, 0 - movs r2, 0xC8 - bl memcpy - ldr r1, _08010828 @ =0xfffffe70 - adds r0, r4, r1 - bl TryCorrectShedinjaLanguage - ldr r1, _0801082C @ =0xfffffed4 - adds r0, r4, r1 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - subs r0, 0xC8 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - subs r0, 0x64 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - adds r0, 0x64 - bl TryCorrectShedinjaLanguage - ldr r1, _08010830 @ =gBattleCommunication - b _080108B2 - .align 2, 0 -_08010820: .4byte gUnknown_20241BC -_08010824: .4byte gBlockRecvBuffer -_08010828: .4byte 0xfffffe70 -_0801082C: .4byte 0xfffffed4 -_08010830: .4byte gBattleCommunication -_08010834: - bl sub_800D30C - ldr r0, _08010848 @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - b _080108B8 - .align 2, 0 -_08010848: .4byte gBattleCommunication -_0801084C: - ldr r0, _08010880 @ =gUnknown_2023E83 - adds r1, r0, 0x1 - bl BattleInitAllSprites - lsls r0, 24 - cmp r0, 0 - beq _080108B8 - ldr r2, _08010884 @ =gPreBattleCallback1 - ldr r1, _08010888 @ =gMain - ldr r0, [r1] - str r0, [r2] - ldr r0, _0801088C @ =BattleMainCB1 - str r0, [r1] - ldr r0, _08010890 @ =BattleMainCB2 - bl SetMainCallback2 - ldr r2, _08010894 @ =gBattleTypeFlags - ldr r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080108B8 - movs r0, 0x20 - orrs r1, r0 - str r1, [r2] - b _080108B8 - .align 2, 0 -_08010880: .4byte gUnknown_2023E83 -_08010884: .4byte gPreBattleCallback1 -_08010888: .4byte gMain -_0801088C: .4byte BattleMainCB1 -_08010890: .4byte BattleMainCB2 -_08010894: .4byte gBattleTypeFlags -_08010898: - ldr r0, _080108C0 @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - movs r1, 0x1 - strb r1, [r0, 0x1] -_080108A4: - ldr r1, _080108C0 @ =gBattleCommunication - ldrb r0, [r1, 0x1] - subs r0, 0x1 - strb r0, [r1, 0x1] - lsls r0, 24 - cmp r0, 0 - bne _080108B8 -_080108B2: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080108B8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080108C0: .4byte gBattleCommunication - thumb_func_end CB2_HandleStartBattle - - thumb_func_start sub_80108C4 -sub_80108C4: @ 80108C4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r0, 0 - mov r8, r0 - ldr r1, _080109BC @ =gUnknown_2022B58 - mov r9, r1 - movs r0, 0x18 - add r0, r9 - mov r10, r0 -_080108DC: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r0, _080109C0 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - mov r1, r8 - lsls r5, r1, 5 - mov r1, r9 - adds r6, r5, r1 - strh r0, [r6] - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - strh r0, [r6, 0x2] - mov r0, r9 - adds r0, 0x4 - adds r7, r5, r0 - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r7, 0 - bl GetMonData - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - strb r0, [r6, 0xF] - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - strh r0, [r6, 0x10] - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - strh r0, [r6, 0x12] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - mov r1, r9 - adds r1, 0x14 - adds r1, r5, r1 - str r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - add r5, r10 - str r0, [r5] - adds r0, r4, 0 - bl GetMonGender - strb r0, [r6, 0x1C] - adds r0, r7, 0 - bl StripExtCtrlCodes - adds r0, r4, 0 - movs r1, 0x3 - bl GetMonData - mov r4, r8 - adds r4, 0x1 - cmp r0, 0x1 - beq _08010994 - adds r2, r7, 0 - movs r1, 0 - ldrb r0, [r2] - cmp r0, 0xFF - beq _0801097E -_08010974: - adds r1, 0x1 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08010974 -_0801097E: - cmp r1, 0x5 - bgt _0801098E - movs r3, 0 -_08010984: - adds r0, r2, r1 - strb r3, [r0] - adds r1, 0x1 - cmp r1, 0x5 - ble _08010984 -_0801098E: - adds r1, r2, r1 - movs r0, 0xFF - strb r0, [r1] -_08010994: - mov r8, r4 - cmp r4, 0x2 - ble _080108DC - ldr r0, _080109C4 @ =gBattleStruct - ldr r0, [r0] - movs r1, 0xC2 - lsls r1, 1 - adds r0, r1 - ldr r1, _080109BC @ =gUnknown_2022B58 - movs r2, 0x60 - bl memcpy - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080109BC: .4byte gUnknown_2022B58 -_080109C0: .4byte gPlayerParty -_080109C4: .4byte gBattleStruct - thumb_func_end sub_80108C4 - - thumb_func_start CB2_PreInitMultiBattle -CB2_PreInitMultiBattle: @ 80109C8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - bl GetMultiplayerId - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _08010A0C @ =gBattleStruct - ldr r0, [r4] - adds r0, 0xB5 - strb r6, [r0] - ldr r0, [r4] - movs r1, 0xB0 - adds r1, r0 - mov r9, r1 - adds r0, 0xAE - mov r8, r0 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r5, _08010A10 @ =gBattleCommunication - ldrb r0, [r5] - cmp r0, 0x1 - beq _08010A5C - cmp r0, 0x1 - bgt _08010A14 - cmp r0, 0 - beq _08010A20 - b _08010B82 - .align 2, 0 -_08010A0C: .4byte gBattleStruct -_08010A10: .4byte gBattleCommunication -_08010A14: - cmp r0, 0x2 - beq _08010AFC - cmp r0, 0x3 - bne _08010A1E - b _08010B2A -_08010A1E: - b _08010B82 -_08010A20: - ldr r0, _08010A58 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08010A2A - b _08010B82 -_08010A2A: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010A36 - b _08010B82 -_08010A36: - bl sub_80108C4 - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - movs r2, 0xC2 - lsls r2, 1 - adds r1, r2 - movs r2, 0x60 - bl SendBlock - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _08010B82 - .align 2, 0 -_08010A58: .4byte gReceivedRemoteLinkPlayers -_08010A5C: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010A6A - b _08010B82 -_08010A6A: - bl ResetBlockReceivedFlags - movs r4, 0 - lsls r0, r6, 3 - subs r0, r6 - lsls r5, r0, 2 - movs r7, 0 -_08010A78: - cmp r4, r6 - beq _08010ABA - ldr r2, _08010A9C @ =gLinkPlayers - adds r0, r7, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _08010AA0 - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010AAC - b _08010ABA - .align 2, 0 -_08010A9C: .4byte gLinkPlayers -_08010AA0: - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010ABA -_08010AAC: - lsls r1, r4, 8 - ldr r0, _08010AE4 @ =gBlockRecvBuffer - adds r1, r0 - ldr r0, _08010AE8 @ =gUnknown_2022B58 - movs r2, 0x60 - bl memcpy -_08010ABA: - adds r7, 0x1C - adds r4, 0x1 - cmp r4, 0x3 - ble _08010A78 - ldr r1, _08010AEC @ =gBattleCommunication - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r1, _08010AF0 @ =gMain - ldr r0, [r1, 0x8] - mov r2, r9 - str r0, [r2] - ldr r0, _08010AF4 @ =gBattleTypeFlags - ldr r0, [r0] - mov r2, r8 - strh r0, [r2] - ldr r0, _08010AF8 @ =CB2_PreInitMultiBattle - str r0, [r1, 0x8] - bl sub_8128198 - b _08010B82 - .align 2, 0 -_08010AE4: .4byte gBlockRecvBuffer -_08010AE8: .4byte gUnknown_2022B58 -_08010AEC: .4byte gBattleCommunication -_08010AF0: .4byte gMain -_08010AF4: .4byte gBattleTypeFlags -_08010AF8: .4byte CB2_PreInitMultiBattle -_08010AFC: - ldr r0, _08010B1C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08010B82 - movs r0, 0x3 - strb r0, [r5] - ldr r0, _08010B20 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08010B24 - bl sub_800AB9C - b _08010B82 - .align 2, 0 -_08010B1C: .4byte gPaletteFade -_08010B20: .4byte gWirelessCommType -_08010B24: - bl sub_800AAC0 - b _08010B82 -_08010B2A: - ldr r0, _08010B54 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08010B64 - bl IsRfuTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08010B82 - ldr r1, _08010B58 @ =gBattleTypeFlags - mov r2, r8 - ldrh r0, [r2] - str r0, [r1] - ldr r1, _08010B5C @ =gMain - mov r2, r9 - ldr r0, [r2] - str r0, [r1, 0x8] - ldr r0, _08010B60 @ =CB2_InitBattleInternal - bl SetMainCallback2 - b _08010B82 - .align 2, 0 -_08010B54: .4byte gWirelessCommType -_08010B58: .4byte gBattleTypeFlags -_08010B5C: .4byte gMain -_08010B60: .4byte CB2_InitBattleInternal -_08010B64: - ldr r0, _08010B90 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08010B82 - ldr r1, _08010B94 @ =gBattleTypeFlags - mov r2, r8 - ldrh r0, [r2] - str r0, [r1] - ldr r1, _08010B98 @ =gMain - mov r2, r9 - ldr r0, [r2] - str r0, [r1, 0x8] - ldr r0, _08010B9C @ =CB2_InitBattleInternal - bl SetMainCallback2 -_08010B82: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08010B90: .4byte gReceivedRemoteLinkPlayers -_08010B94: .4byte gBattleTypeFlags -_08010B98: .4byte gMain -_08010B9C: .4byte CB2_InitBattleInternal - thumb_func_end CB2_PreInitMultiBattle - - thumb_func_start CB2_HandleStartMultiBattle -CB2_HandleStartMultiBattle: @ 8010BA0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - bl GetMultiplayerId - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08010BD8 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xB5 - strb r7, [r0] - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - ldr r0, _08010BDC @ =gBattleCommunication - ldrb r0, [r0] - cmp r0, 0xC - bls _08010BCC - b _080110F0 -_08010BCC: - lsls r0, 2 - ldr r1, _08010BE0 @ =_08010BE4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08010BD8: .4byte gBattleStruct -_08010BDC: .4byte gBattleCommunication -_08010BE0: .4byte _08010BE4 - .align 2, 0 -_08010BE4: - .4byte _08010C18 - .4byte _08010C5C - .4byte _08010CD4 - .4byte _08010DB6 - .4byte _08010DE0 - .4byte _080110D0 - .4byte _080110DC - .4byte _08010ED8 - .4byte _08010F00 - .4byte _080110D0 - .4byte _080110DC - .4byte _0801106C - .4byte _08011084 -_08010C18: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08010C44 - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - bl sub_80357C8 - ldr r1, _08010C54 @ =gBattleCommunication - movs r0, 0x1 - strb r0, [r1] -_08010C44: - ldr r0, _08010C58 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _08010C4E - b _080110F0 -_08010C4E: - bl LoadWirelessStatusIndicatorSpriteGfx - b _080110F0 - .align 2, 0 -_08010C54: .4byte gBattleCommunication -_08010C58: .4byte gWirelessCommType -_08010C5C: - ldr r0, _08010CC0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08010C66 - b _080110F0 -_08010C66: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08010CAA - ldr r4, _08010CC4 @ =gBattleStruct - ldr r0, [r4] - movs r5, 0xC2 - lsls r5, 1 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - ldr r2, _08010CC8 @ =0x00000185 - adds r1, r0, r2 - movs r0, 0x2 - strb r0, [r1] - bl sub_800FFEC - bl SetPlayerBerryDataInBattleStruct - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, [r4] - adds r1, r5 - movs r2, 0x20 - bl SendBlock - ldr r1, _08010CCC @ =gBattleCommunication - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08010CAA: - ldr r0, _08010CD0 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - bne _08010CB4 - b _080110F0 -_08010CB4: - movs r0, 0 - movs r1, 0 - bl CreateWirelessStatusIndicatorSprite - b _080110F0 - .align 2, 0 -_08010CC0: .4byte gReceivedRemoteLinkPlayers -_08010CC4: .4byte gBattleStruct -_08010CC8: .4byte 0x00000185 -_08010CCC: .4byte gBattleCommunication -_08010CD0: .4byte gWirelessCommType -_08010CD4: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010CE2 - b _080110F0 -_08010CE2: - bl ResetBlockReceivedFlags - movs r0, 0x4 - adds r1, r7, 0 - bl sub_8010414 - bl SetAllPlayersBerryData - bl SetDeoxysStats - ldr r0, _08010D4C @ =gDecompressionBuffer - ldr r1, _08010D50 @ =gPlayerParty - movs r2, 0x96 - lsls r2, 1 - bl memcpy - ldr r0, _08010D54 @ =sub_800F6FC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08010D58 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - movs r0, 0x87 - lsls r0, 1 - strh r0, [r1, 0xA] - movs r0, 0x5A - strh r0, [r1, 0xC] - strh r2, [r1, 0x12] - strh r2, [r1, 0xE] - strh r2, [r1, 0x10] - adds r2, r1, 0 - ldr r0, _08010D5C @ =gBlockRecvBuffer - adds r3, r0, 0x2 - ldr r5, _08010D60 @ =gLinkPlayers - movs r4, 0x3F - movs r7, 0x80 - lsls r7, 1 - movs r6, 0x3 -_08010D3A: - ldrh r0, [r5, 0x18] - cmp r0, 0x1 - beq _08010D76 - cmp r0, 0x1 - bgt _08010D64 - cmp r0, 0 - beq _08010D6E - b _08010D9C - .align 2, 0 -_08010D4C: .4byte gDecompressionBuffer -_08010D50: .4byte gPlayerParty -_08010D54: .4byte sub_800F6FC -_08010D58: .4byte gTasks -_08010D5C: .4byte gBlockRecvBuffer -_08010D60: .4byte gLinkPlayers -_08010D64: - cmp r0, 0x2 - beq _08010D7E - cmp r0, 0x3 - beq _08010D8E - b _08010D9C -_08010D6E: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - b _08010D86 -_08010D76: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - b _08010D96 -_08010D7E: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - lsls r1, 6 -_08010D86: - ldrh r0, [r2, 0xE] - orrs r1, r0 - strh r1, [r2, 0xE] - b _08010D9C -_08010D8E: - ldrh r0, [r3] - adds r1, r4, 0 - ands r1, r0 - lsls r1, 6 -_08010D96: - ldrh r0, [r2, 0x10] - orrs r1, r0 - strh r1, [r2, 0x10] -_08010D9C: - adds r3, r7 - adds r5, 0x1C - subs r6, 0x1 - cmp r6, 0 - bge _08010D3A - bl ZeroPlayerPartyMons - bl ZeroEnemyPartyMons - ldr r1, _08010DD8 @ =gBattleCommunication - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08010DB6: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010DC2 - b _080110F0 -_08010DC2: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08010DDC @ =gDecompressionBuffer - movs r2, 0xC8 - bl SendBlock - ldr r1, _08010DD8 @ =gBattleCommunication - b _080110EA - .align 2, 0 -_08010DD8: .4byte gBattleCommunication -_08010DDC: .4byte gDecompressionBuffer -_08010DE0: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010DEE - b _080110F0 -_08010DEE: - bl ResetBlockReceivedFlags - movs r6, 0 - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - mov r8, r0 - ldr r4, _08010E18 @ =gBlockRecvBuffer - movs r5, 0 -_08010E00: - cmp r6, r7 - bne _08010E34 - ldr r0, _08010E1C @ =gLinkPlayers - adds r0, r5, r0 - ldrh r0, [r0, 0x18] - cmp r0, 0x2 - bgt _08010E20 - cmp r0, 0x1 - bge _08010E2C - cmp r0, 0 - beq _08010E24 - b _08010EBE - .align 2, 0 -_08010E18: .4byte gBlockRecvBuffer -_08010E1C: .4byte gLinkPlayers -_08010E20: - cmp r0, 0x3 - bne _08010EBE -_08010E24: - ldr r0, _08010E28 @ =gPlayerParty - b _08010EA4 - .align 2, 0 -_08010E28: .4byte gPlayerParty -_08010E2C: - ldr r0, _08010E30 @ =gUnknown_20243B0 - b _08010EA4 - .align 2, 0 -_08010E30: .4byte gUnknown_20243B0 -_08010E34: - ldr r2, _08010E54 @ =gLinkPlayers - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _08010E58 - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010E66 - b _08010E8C - .align 2, 0 -_08010E54: .4byte gLinkPlayers -_08010E58: - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010E8C -_08010E66: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010E78 - cmp r2, 0x1 - bge _08010E84 - cmp r2, 0 - beq _08010E7C - b _08010EBE -_08010E78: - cmp r2, 0x3 - bne _08010EBE -_08010E7C: - ldr r0, _08010E80 @ =gPlayerParty - b _08010EA4 - .align 2, 0 -_08010E80: .4byte gPlayerParty -_08010E84: - ldr r0, _08010E88 @ =gUnknown_20243B0 - b _08010EA4 - .align 2, 0 -_08010E88: .4byte gUnknown_20243B0 -_08010E8C: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010E9E - cmp r2, 0x1 - bge _08010EB4 - cmp r2, 0 - beq _08010EA2 - b _08010EBE -_08010E9E: - cmp r2, 0x3 - bne _08010EBE -_08010EA2: - ldr r0, _08010EB0 @ =gEnemyParty -_08010EA4: - adds r1, r4, 0 - movs r2, 0xC8 - bl memcpy - b _08010EBE - .align 2, 0 -_08010EB0: .4byte gEnemyParty -_08010EB4: - ldr r0, _08010ED0 @ =gUnknown_2024158 - adds r1, r4, 0 - movs r2, 0xC8 - bl memcpy -_08010EBE: - movs r2, 0x80 - lsls r2, 1 - adds r4, r2 - adds r5, 0x1C - adds r6, 0x1 - cmp r6, 0x3 - ble _08010E00 - ldr r1, _08010ED4 @ =gBattleCommunication - b _080110EA - .align 2, 0 -_08010ED0: .4byte gUnknown_2024158 -_08010ED4: .4byte gBattleCommunication -_08010ED8: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _08010EE4 - b _080110F0 -_08010EE4: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08010EF8 @ =gDecompressionBuffer + 0x0C8 - movs r2, 0x64 - bl SendBlock - ldr r1, _08010EFC @ =gBattleCommunication - b _080110EA - .align 2, 0 -_08010EF8: .4byte gDecompressionBuffer + 0x0C8 -_08010EFC: .4byte gBattleCommunication -_08010F00: - bl GetBlockReceivedStatus - movs r1, 0xF - ands r1, r0 - cmp r1, 0xF - beq _08010F0E - b _080110F0 -_08010F0E: - bl ResetBlockReceivedFlags - movs r6, 0 - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 2 - mov r8, r0 - ldr r4, _08010F38 @ =gBlockRecvBuffer - movs r5, 0 -_08010F20: - cmp r6, r7 - bne _08010F54 - ldr r0, _08010F3C @ =gLinkPlayers - adds r0, r5, r0 - ldrh r0, [r0, 0x18] - cmp r0, 0x2 - bgt _08010F40 - cmp r0, 0x1 - bge _08010F4C - cmp r0, 0 - beq _08010F44 - b _08010FDE - .align 2, 0 -_08010F38: .4byte gBlockRecvBuffer -_08010F3C: .4byte gLinkPlayers -_08010F40: - cmp r0, 0x3 - bne _08010FDE -_08010F44: - ldr r0, _08010F48 @ =gUnknown_202434C - b _08010FC4 - .align 2, 0 -_08010F48: .4byte gUnknown_202434C -_08010F4C: - ldr r0, _08010F50 @ =gUnknown_2024478 - b _08010FC4 - .align 2, 0 -_08010F50: .4byte gUnknown_2024478 -_08010F54: - ldr r2, _08010F74 @ =gLinkPlayers - adds r0, r5, r2 - ldrh r1, [r0, 0x18] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _08010F78 - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010F86 - b _08010FAC - .align 2, 0 -_08010F74: .4byte gLinkPlayers -_08010F78: - mov r1, r8 - adds r0, r1, r2 - ldrh r1, [r0, 0x18] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08010FAC -_08010F86: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010F98 - cmp r2, 0x1 - bge _08010FA4 - cmp r2, 0 - beq _08010F9C - b _08010FDE -_08010F98: - cmp r2, 0x3 - bne _08010FDE -_08010F9C: - ldr r0, _08010FA0 @ =gUnknown_202434C - b _08010FC4 - .align 2, 0 -_08010FA0: .4byte gUnknown_202434C -_08010FA4: - ldr r0, _08010FA8 @ =gUnknown_2024478 - b _08010FC4 - .align 2, 0 -_08010FA8: .4byte gUnknown_2024478 -_08010FAC: - adds r0, r5, r2 - ldrh r2, [r0, 0x18] - cmp r2, 0x2 - bgt _08010FBE - cmp r2, 0x1 - bge _08010FD4 - cmp r2, 0 - beq _08010FC2 - b _08010FDE -_08010FBE: - cmp r2, 0x3 - bne _08010FDE -_08010FC2: - ldr r0, _08010FD0 @ =gUnknown_20240F4 -_08010FC4: - adds r1, r4, 0 - movs r2, 0x64 - bl memcpy - b _08010FDE - .align 2, 0 -_08010FD0: .4byte gUnknown_20240F4 -_08010FD4: - ldr r0, _0801105C @ =gUnknown_2024220 - adds r1, r4, 0 - movs r2, 0x64 - bl memcpy -_08010FDE: - movs r2, 0x80 - lsls r2, 1 - adds r4, r2 - adds r5, 0x1C - adds r6, 0x1 - cmp r6, 0x3 - ble _08010F20 - ldr r4, _08011060 @ =gPlayerParty - adds r0, r4, 0 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - adds r0, 0x64 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - adds r0, 0xC8 - bl TryCorrectShedinjaLanguage - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, r1 - bl TryCorrectShedinjaLanguage - movs r2, 0xC8 - lsls r2, 1 - adds r0, r4, r2 - bl TryCorrectShedinjaLanguage - movs r1, 0xFA - lsls r1, 1 - adds r0, r4, r1 - bl TryCorrectShedinjaLanguage - ldr r4, _08011064 @ =gEnemyParty - adds r0, r4, 0 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - adds r0, 0x64 - bl TryCorrectShedinjaLanguage - adds r0, r4, 0 - adds r0, 0xC8 - bl TryCorrectShedinjaLanguage - movs r2, 0x96 - lsls r2, 1 - adds r0, r4, r2 - bl TryCorrectShedinjaLanguage - movs r1, 0xC8 - lsls r1, 1 - adds r0, r4, r1 - bl TryCorrectShedinjaLanguage - movs r2, 0xFA - lsls r2, 1 - adds r0, r4, r2 - bl TryCorrectShedinjaLanguage - ldr r1, _08011068 @ =gBattleCommunication - b _080110EA - .align 2, 0 -_0801105C: .4byte gUnknown_2024220 -_08011060: .4byte gPlayerParty -_08011064: .4byte gEnemyParty -_08011068: .4byte gBattleCommunication -_0801106C: - bl sub_800D30C - ldr r0, _08011080 @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - movs r2, 0 - strb r1, [r0] - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - b _080110F0 - .align 2, 0 -_08011080: .4byte gBattleCommunication -_08011084: - ldr r0, _080110B8 @ =gUnknown_2023E83 - adds r1, r0, 0x1 - bl BattleInitAllSprites - lsls r0, 24 - cmp r0, 0 - beq _080110F0 - ldr r2, _080110BC @ =gPreBattleCallback1 - ldr r1, _080110C0 @ =gMain - ldr r0, [r1] - str r0, [r2] - ldr r0, _080110C4 @ =BattleMainCB1 - str r0, [r1] - ldr r0, _080110C8 @ =BattleMainCB2 - bl SetMainCallback2 - ldr r2, _080110CC @ =gBattleTypeFlags - ldr r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080110F0 - movs r0, 0x20 - orrs r1, r0 - str r1, [r2] - b _080110F0 - .align 2, 0 -_080110B8: .4byte gUnknown_2023E83 -_080110BC: .4byte gPreBattleCallback1 -_080110C0: .4byte gMain -_080110C4: .4byte BattleMainCB1 -_080110C8: .4byte BattleMainCB2 -_080110CC: .4byte gBattleTypeFlags -_080110D0: - ldr r0, _080110FC @ =gBattleCommunication - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - movs r1, 0x1 - strb r1, [r0, 0x1] -_080110DC: - ldr r1, _080110FC @ =gBattleCommunication - ldrb r0, [r1, 0x1] - subs r0, 0x1 - strb r0, [r1, 0x1] - lsls r0, 24 - cmp r0, 0 - bne _080110F0 -_080110EA: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080110F0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080110FC: .4byte gBattleCommunication - thumb_func_end CB2_HandleStartMultiBattle - - thumb_func_start BattleMainCB2 -BattleMainCB2: @ 8011100 - push {lr} - sub sp, 0x4 - bl AnimateSprites - bl BuildOamBuffer - bl RunTextPrinters - bl UpdatePaletteFade - bl RunTasks - ldr r0, _08011160 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08011158 - ldr r0, _08011164 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 9 - ands r0, r1 - cmp r0, 0 - beq _08011158 - ldr r2, _08011168 @ =gSpecialVar_Result - ldr r1, _0801116C @ =gBattleOutcome - movs r0, 0x3 - strb r0, [r1] - movs r0, 0x3 - strh r0, [r2] - bl ResetPaletteFadeControl - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08011170 @ =CB2_QuitPokeDudeBattle - bl SetMainCallback2 -_08011158: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08011160: .4byte gMain -_08011164: .4byte gBattleTypeFlags -_08011168: .4byte gSpecialVar_Result -_0801116C: .4byte gBattleOutcome -_08011170: .4byte CB2_QuitPokeDudeBattle - thumb_func_end BattleMainCB2 - - thumb_func_start FreeRestoreBattleData -FreeRestoreBattleData: @ 8011174 - push {lr} - ldr r1, _080111AC @ =gMain - ldr r0, _080111B0 @ =gPreBattleCallback1 - ldr r0, [r0] - str r0, [r1] - ldr r2, _080111B4 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r2, 0x15] - ldr r0, _080111B8 @ =0x00000439 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - bl ZeroEnemyPartyMons - movs r0, 0x53 - bl m4aSongNumStop - bl FreeMonSpritesGfx - bl FreeBattleSpritesData - bl FreeBattleResources - pop {r0} - bx r0 - .align 2, 0 -_080111AC: .4byte gMain -_080111B0: .4byte gPreBattleCallback1 -_080111B4: .4byte gScanlineEffect -_080111B8: .4byte 0x00000439 - thumb_func_end FreeRestoreBattleData - - thumb_func_start CB2_QuitPokeDudeBattle -CB2_QuitPokeDudeBattle: @ 80111BC - push {lr} - bl UpdatePaletteFade - ldr r0, _080111E4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080111DE - bl FreeRestoreBattleData - bl FreeAllWindowBuffers - ldr r0, _080111E8 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_080111DE: - pop {r0} - bx r0 - .align 2, 0 -_080111E4: .4byte gPaletteFade -_080111E8: .4byte gMain - thumb_func_end CB2_QuitPokeDudeBattle - - thumb_func_start sub_80111EC -sub_80111EC: @ 80111EC - movs r1, 0 - strh r1, [r0, 0x2E] - ldr r1, _080111F8 @ =sub_80111FC - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080111F8: .4byte sub_80111FC - thumb_func_end sub_80111EC - - thumb_func_start sub_80111FC -sub_80111FC: @ 80111FC - push {r4-r7,lr} - adds r5, r0, 0 - movs r0, 0x2E - ldrsh r6, [r5, r0] - cmp r6, 0x1 - beq _08011236 - cmp r6, 0x1 - bgt _08011212 - cmp r6, 0 - beq _08011218 - b _080112D0 -_08011212: - cmp r6, 0x2 - beq _080112A0 - b _080112D0 -_08011218: - ldr r4, _08011298 @ =gUnknown_2022BC0 - movs r0, 0x80 - lsls r0, 5 - bl AllocZeroed - str r0, [r4] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - strh r6, [r5, 0x30] - ldr r0, _0801129C @ =0x00000281 - strh r0, [r5, 0x32] - strh r6, [r5, 0x34] - movs r0, 0x1 - strh r0, [r5, 0x36] -_08011236: - ldrh r0, [r5, 0x36] - subs r0, 0x1 - strh r0, [r5, 0x36] - lsls r0, 16 - cmp r0, 0 - bne _080112D0 - movs r0, 0x2 - strh r0, [r5, 0x36] - movs r1, 0x30 - ldrsh r2, [r5, r1] - movs r3, 0x34 - ldrsh r0, [r5, r3] - lsls r0, 5 - adds r2, r0 - movs r3, 0x32 - ldrsh r1, [r5, r3] - subs r1, r0 - movs r3, 0 - ldr r0, _08011298 @ =gUnknown_2022BC0 - mov r12, r0 - lsls r7, r2, 1 - movs r4, 0x3D - lsls r6, r1, 1 -_08011264: - mov r1, r12 - ldr r0, [r1] - lsls r2, r3, 1 - adds r1, r7, r0 - adds r1, r2, r1 - strh r4, [r1] - adds r0, r6, r0 - adds r2, r0 - strh r4, [r2] - adds r3, 0x2 - cmp r3, 0x1D - ble _08011264 - ldrh r0, [r5, 0x34] - adds r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _080112D0 - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - movs r0, 0x20 - strh r0, [r5, 0x30] - b _080112D0 - .align 2, 0 -_08011298: .4byte gUnknown_2022BC0 -_0801129C: .4byte 0x00000281 -_080112A0: - ldrh r0, [r5, 0x30] - subs r0, 0x1 - strh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - bne _080112D0 - ldr r4, _080112D8 @ =gUnknown_2022BC0 - ldr r0, [r4] - cmp r0, 0 - beq _080112CA - movs r2, 0x80 - lsls r2, 5 - movs r1, 0 - bl memset - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] -_080112CA: - ldr r0, _080112DC @ =CB2_InitBattle - bl SetMainCallback2 -_080112D0: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080112D8: .4byte gUnknown_2022BC0 -_080112DC: .4byte CB2_InitBattle - thumb_func_end sub_80111FC - - thumb_func_start CreateNPCTrainerParty -CreateNPCTrainerParty: @ 80112E0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - str r0, [sp, 0x10] - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x14] - movs r0, 0 - mov r9, r0 - movs r0, 0x80 - lsls r0, 3 - cmp r1, r0 - bne _08011304 - movs r0, 0 - b _080116AC -_08011304: - ldr r0, _08011334 @ =gBattleTypeFlags - ldr r0, [r0] - ldr r1, _08011338 @ =0x00080908 - ands r0, r1 - ldr r1, [sp, 0x14] - lsls r1, 2 - str r1, [sp, 0x20] - cmp r0, 0x8 - beq _08011318 - b _0801169C -_08011318: - bl ZeroEnemyPartyMons - movs r2, 0 - str r2, [sp, 0x18] - ldr r2, _0801133C @ =gTrainers - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r0, r2 - adds r0, 0x20 - ldr r4, [sp, 0x18] - b _0801167E - .align 2, 0 -_08011334: .4byte gBattleTypeFlags -_08011338: .4byte 0x00080908 -_0801133C: .4byte gTrainers -_08011340: - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r1, r0, r2 - ldrb r0, [r1, 0x18] - cmp r0, 0x1 - bne _08011354 - movs r4, 0x80 - mov r10, r4 - b _08011366 -_08011354: - ldrb r1, [r1, 0x2] - movs r0, 0x80 - ands r0, r1 - movs r1, 0x88 - mov r10, r1 - cmp r0, 0 - beq _08011366 - movs r2, 0x78 - mov r10, r2 -_08011366: - movs r6, 0 - ldr r0, _080113BC @ =gTrainers - ldr r2, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r1, r2, r3 - lsls r1, 3 - adds r3, r0, 0x4 - adds r1, r3 - ldrb r1, [r1] - adds r4, r0, 0 - ldr r0, [sp, 0x18] - adds r0, 0x1 - str r0, [sp, 0x1C] - cmp r1, 0xFF - beq _0801139E -_08011384: - ldr r0, [sp, 0x14] - adds r1, r2, r0 - lsls r1, 3 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _08011384 -_0801139E: - adds r2, r4, 0 - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r1, r0, 3 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08011454 - cmp r0, 0x1 - bgt _080113C0 - cmp r0, 0 - beq _080113CE - b _0801166C - .align 2, 0 -_080113BC: .4byte gTrainers -_080113C0: - cmp r0, 0x2 - bne _080113C6 - b _08011514 -_080113C6: - cmp r0, 0x3 - bne _080113CC - b _080115A8 -_080113CC: - b _0801166C -_080113CE: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r4, [r0] - movs r6, 0 - ldr r0, [sp, 0x18] - lsls r2, r0, 3 - adds r0, r2, r4 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _08011450 @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - adds r5, r2, 0 - cmp r0, 0xFF - beq _08011410 - adds r3, r1, 0 - movs r7, 0xB -_080113F4: - adds r0, r2, r4 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r7 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _080113F4 -_08011410: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - adds r4, r5, r4 - ldrh r1, [r4] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, [sp, 0x18] - movs r1, 0x64 - adds r0, r3, 0 - muls r0, r1 - ldr r2, [sp, 0x10] - adds r0, r2, r0 - ldrh r1, [r4, 0x4] - ldrb r2, [r4, 0x2] - movs r3, 0x1 - str r3, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r3, 0x2 - str r3, [sp, 0x8] - movs r3, 0 - str r3, [sp, 0xC] - adds r3, r6, 0 - bl CreateMon - b _0801166C - .align 2, 0 -_08011450: .4byte gSpeciesNames -_08011454: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r7, [r0] - movs r6, 0 - ldr r4, [sp, 0x18] - lsls r2, r4, 4 - adds r0, r2, r7 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _0801150C @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - mov r8, r2 - cmp r0, 0xFF - beq _08011496 - adds r3, r1, 0 - movs r4, 0xB -_0801147A: - adds r0, r2, r7 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r4 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0801147A -_08011496: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - mov r3, r8 - adds r4, r3, r7 - ldrh r1, [r4] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [sp, 0x18] - movs r1, 0x64 - adds r5, r0, 0 - muls r5, r1 - ldr r2, [sp, 0x10] - adds r5, r2, r5 - ldrh r1, [r4, 0x4] - ldrb r2, [r4, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r5, 0 - adds r3, r6, 0 - bl CreateMon - movs r6, 0 - mov r0, r8 - adds r0, 0x6 - adds r4, r7, r0 -_080114E0: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r5, 0 - adds r2, r4, 0 - bl SetMonData - adds r1, r6, 0 - adds r1, 0x11 - ldrh r0, [r4] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - ldr r0, _08011510 @ =gBattleMoves+0x4 - adds r2, r0 - adds r0, r5, 0 - bl SetMonData - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _080114E0 - b _0801166C - .align 2, 0 -_0801150C: .4byte gSpeciesNames -_08011510: .4byte gBattleMoves+0x4 -_08011514: - adds r0, r2, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r4, [r0] - movs r6, 0 - ldr r0, [sp, 0x18] - lsls r2, r0, 3 - adds r0, r2, r4 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _080115A4 @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - adds r5, r2, 0 - cmp r0, 0xFF - beq _08011556 - adds r3, r1, 0 - movs r7, 0xB -_0801153A: - adds r0, r2, r4 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r7 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _0801153A -_08011556: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - adds r5, r4 - ldrh r1, [r5] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, [sp, 0x18] - movs r0, 0x64 - adds r4, r3, 0 - muls r4, r0 - ldr r1, [sp, 0x10] - adds r4, r1, r4 - ldrh r1, [r5, 0x4] - ldrb r2, [r5, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r4, 0 - adds r3, r6, 0 - bl CreateMon - adds r5, 0x6 - adds r0, r4, 0 - movs r1, 0xC - adds r2, r5, 0 - bl SetMonData - b _0801166C - .align 2, 0 -_080115A4: .4byte gSpeciesNames -_080115A8: - adds r0, r4, 0 - adds r0, 0x24 - adds r0, r1, r0 - ldr r7, [r0] - movs r6, 0 - ldr r4, [sp, 0x18] - lsls r2, r4, 4 - adds r0, r2, r7 - ldrh r1, [r0, 0x4] - movs r0, 0xB - muls r0, r1 - ldr r1, _080116BC @ =gSpeciesNames - adds r0, r1 - ldrb r0, [r0] - mov r8, r2 - cmp r0, 0xFF - beq _080115EA - adds r3, r1, 0 - movs r4, 0xB -_080115CE: - adds r0, r2, r7 - ldrh r0, [r0, 0x4] - adds r1, r0, 0 - muls r1, r4 - adds r0, r6, r1 - adds r0, r3 - ldrb r0, [r0] - add r9, r0 - adds r6, 0x1 - adds r1, r6, r1 - adds r1, r3 - ldrb r0, [r1] - cmp r0, 0xFF - bne _080115CE -_080115EA: - mov r2, r9 - lsls r0, r2, 8 - add r10, r0 - mov r3, r8 - adds r5, r3, r7 - ldrh r1, [r5] - lsls r0, r1, 5 - subs r0, r1 - movs r1, 0xFF - bl __divsi3 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [sp, 0x18] - movs r1, 0x64 - adds r4, r0, 0 - muls r4, r1 - ldr r2, [sp, 0x10] - adds r4, r2, r4 - ldrh r1, [r5, 0x4] - ldrb r2, [r5, 0x2] - movs r0, 0x1 - str r0, [sp] - mov r3, r10 - str r3, [sp, 0x4] - movs r0, 0x2 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - adds r0, r4, 0 - adds r3, r6, 0 - bl CreateMon - adds r5, 0x6 - adds r0, r4, 0 - movs r1, 0xC - adds r2, r5, 0 - bl SetMonData - movs r6, 0 - adds r5, r4, 0 - mov r0, r8 - adds r0, 0x8 - adds r4, r7, r0 -_08011642: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r5, 0 - adds r2, r4, 0 - bl SetMonData - adds r1, r6, 0 - adds r1, 0x11 - ldrh r0, [r4] - lsls r2, r0, 1 - adds r2, r0 - lsls r2, 2 - ldr r0, _080116C0 @ =gBattleMoves+0x4 - adds r2, r0 - adds r0, r5, 0 - bl SetMonData - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _08011642 -_0801166C: - ldr r4, [sp, 0x1C] - str r4, [sp, 0x18] - ldr r2, _080116C4 @ =gTrainers - ldr r1, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r1, r3 - lsls r0, 3 - adds r0, r2 - adds r0, 0x20 -_0801167E: - ldrb r0, [r0] - cmp r4, r0 - bge _08011686 - b _08011340 -_08011686: - ldr r2, _080116C8 @ =gBattleTypeFlags - ldr r1, _080116C4 @ =gTrainers - ldr r4, [sp, 0x20] - ldr r3, [sp, 0x14] - adds r0, r4, r3 - lsls r0, 3 - adds r0, r1 - ldrb r1, [r0, 0x18] - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] -_0801169C: - ldr r0, _080116C4 @ =gTrainers - ldr r4, [sp, 0x20] - ldr r2, [sp, 0x14] - adds r1, r4, r2 - lsls r1, 3 - adds r1, r0 - adds r1, 0x20 - ldrb r0, [r1] -_080116AC: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080116BC: .4byte gSpeciesNames -_080116C0: .4byte gBattleMoves+0x4 -_080116C4: .4byte gTrainers -_080116C8: .4byte gBattleTypeFlags - thumb_func_end CreateNPCTrainerParty - - thumb_func_start sub_80116CC -sub_80116CC: @ 80116CC - push {lr} - ldr r0, _080116EC @ =0x04000006 - ldrh r0, [r0] - subs r0, 0x6F - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x30 - bhi _080116E6 - ldr r1, _080116F0 @ =0x04000008 - movs r2, 0x98 - lsls r2, 8 - adds r0, r2, 0 - strh r0, [r1] -_080116E6: - pop {r0} - bx r0 - .align 2, 0 -_080116EC: .4byte 0x04000006 -_080116F0: .4byte 0x04000008 - thumb_func_end sub_80116CC - - thumb_func_start VBlankCB_Battle -VBlankCB_Battle: @ 80116F4 - push {lr} - bl Random - ldr r0, _08011788 @ =gBattle_BG0_X - ldrh r1, [r0] - movs r0, 0x10 - bl SetGpuReg - ldr r0, _0801178C @ =gBattle_BG0_Y - ldrh r1, [r0] - movs r0, 0x12 - bl SetGpuReg - ldr r0, _08011790 @ =gBattle_BG1_X - ldrh r1, [r0] - movs r0, 0x14 - bl SetGpuReg - ldr r0, _08011794 @ =gBattle_BG1_Y - ldrh r1, [r0] - movs r0, 0x16 - bl SetGpuReg - ldr r0, _08011798 @ =gBattle_BG2_X - ldrh r1, [r0] - movs r0, 0x18 - bl SetGpuReg - ldr r0, _0801179C @ =gBattle_BG2_Y - ldrh r1, [r0] - movs r0, 0x1A - bl SetGpuReg - ldr r0, _080117A0 @ =gBattle_BG3_X - ldrh r1, [r0] - movs r0, 0x1C - bl SetGpuReg - ldr r0, _080117A4 @ =gBattle_BG3_Y - ldrh r1, [r0] - movs r0, 0x1E - bl SetGpuReg - ldr r0, _080117A8 @ =gBattle_WIN0H - ldrh r1, [r0] - movs r0, 0x40 - bl SetGpuReg - ldr r0, _080117AC @ =gBattle_WIN0V - ldrh r1, [r0] - movs r0, 0x44 - bl SetGpuReg - ldr r0, _080117B0 @ =gBattle_WIN1H - ldrh r1, [r0] - movs r0, 0x42 - bl SetGpuReg - ldr r0, _080117B4 @ =gBattle_WIN1V - ldrh r1, [r0] - movs r0, 0x46 - bl SetGpuReg - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - bl ScanlineEffect_InitHBlankDmaTransfer - pop {r0} - bx r0 - .align 2, 0 -_08011788: .4byte gBattle_BG0_X -_0801178C: .4byte gBattle_BG0_Y -_08011790: .4byte gBattle_BG1_X -_08011794: .4byte gBattle_BG1_Y -_08011798: .4byte gBattle_BG2_X -_0801179C: .4byte gBattle_BG2_Y -_080117A0: .4byte gBattle_BG3_X -_080117A4: .4byte gBattle_BG3_Y -_080117A8: .4byte gBattle_WIN0H -_080117AC: .4byte gBattle_WIN0V -_080117B0: .4byte gBattle_WIN1H -_080117B4: .4byte gBattle_WIN1V - thumb_func_end VBlankCB_Battle - - thumb_func_start nullsub_9 -nullsub_9: @ 80117B8 - bx lr - thumb_func_end nullsub_9 - - thumb_func_start sub_80117BC -sub_80117BC: @ 80117BC - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080117DC - 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 _080117EE -_080117DC: - 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] -_080117EE: - 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 _08011822 - ldr r4, _08011828 @ =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 -_08011822: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08011828: .4byte 0x00002710 - thumb_func_end sub_80117BC - - thumb_func_start sub_801182C -sub_801182C: @ 801182C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _08011848 @ =sub_80117BC - str r0, [r4, 0x1C] - movs r0, 0x61 - bl PlaySE - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011848: .4byte sub_80117BC - thumb_func_end sub_801182C - - thumb_func_start sub_801184C -sub_801184C: @ 801184C - 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, _08011894 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xB5 - ldrb r2, [r0] - ldr r0, _08011898 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080118BC - ldr r1, _0801189C @ =gLinkPlayers - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x18] - cmp r0, 0x1 - beq _080118A8 - cmp r0, 0x1 - bgt _080118A0 - cmp r0, 0 - beq _080118BC - b _080118C4 - .align 2, 0 -_08011894: .4byte gBattleStruct -_08011898: .4byte gBattleTypeFlags -_0801189C: .4byte gLinkPlayers -_080118A0: - cmp r0, 0x2 - beq _080118BC - cmp r0, 0x3 - bne _080118C4 -_080118A8: - ldr r0, _080118B4 @ =gEnemyParty - str r0, [sp, 0x4] - ldr r1, _080118B8 @ =gPlayerParty - str r1, [sp, 0x8] - b _080118C4 - .align 2, 0 -_080118B4: .4byte gEnemyParty -_080118B8: .4byte gPlayerParty -_080118BC: - ldr r2, _08011A10 @ =gPlayerParty - str r2, [sp, 0x4] - ldr r3, _08011A14 @ =gEnemyParty - str r3, [sp, 0x8] -_080118C4: - movs r7, 0 - movs r0, 0 - mov r8, r0 - ldr r1, [sp] - lsls r1, 2 - str r1, [sp, 0xC] - movs r2, 0xCE - lsls r2, 1 - mov r10, r2 - mov r9, r0 -_080118D8: - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r3, [sp, 0x4] - adds r4, r3, 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 _08011948 - cmp r5, r10 - beq _0801191C - cmp r6, 0 - beq _0801191C - cmp r1, 0 - bne _0801191C - movs r0, 0x1 - mov r2, r9 - lsls r0, r2 - orrs r7, r0 -_0801191C: - cmp r5, 0 - beq _08011948 - cmp r6, 0 - beq _08011934 - cmp r5, r10 - beq _0801192C - cmp r1, 0 - beq _08011934 -_0801192C: - movs r0, 0x2 - mov r3, r9 - lsls r0, r3 - orrs r7, r0 -_08011934: - cmp r5, 0 - beq _08011948 - cmp r5, r10 - beq _08011948 - cmp r6, 0 - bne _08011948 - movs r0, 0x3 - mov r1, r9 - lsls r0, r1 - orrs r7, r0 -_08011948: - movs r2, 0x2 - add r9, r2 - movs r3, 0x1 - add r8, r3 - mov r0, r8 - cmp r0, 0x5 - ble _080118D8 - ldr r1, _08011A18 @ =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 -_08011972: - 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 _080119E2 - cmp r5, r10 - beq _080119B6 - cmp r6, 0 - beq _080119B6 - cmp r1, 0 - bne _080119B6 - movs r0, 0x1 - mov r3, r9 - lsls r0, r3 - orrs r7, r0 -_080119B6: - cmp r5, 0 - beq _080119E2 - cmp r6, 0 - beq _080119CE - cmp r5, r10 - beq _080119C6 - cmp r1, 0 - beq _080119CE -_080119C6: - movs r0, 0x2 - mov r1, r9 - lsls r0, r1 - orrs r7, r0 -_080119CE: - cmp r5, 0 - beq _080119E2 - cmp r5, r10 - beq _080119E2 - cmp r6, 0 - bne _080119E2 - movs r0, 0x3 - mov r2, r9 - lsls r0, r2 - orrs r7, r0 -_080119E2: - movs r3, 0x2 - add r9, r3 - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0x5 - ble _08011972 - ldr r1, _08011A18 @ =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 -_08011A10: .4byte gPlayerParty -_08011A14: .4byte gEnemyParty -_08011A18: .4byte gTasks - thumb_func_end sub_801184C - - thumb_func_start sub_8011A1C -sub_8011A1C: @ 8011A1C - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - bl SetHBlankCallback - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - str r0, [sp] - movs r1, 0xC0 - lsls r1, 19 - ldr r2, _08011B40 @ =0x05006000 - mov r0, sp - bl CpuSet - movs r0, 0x4C - movs r1, 0 - bl SetGpuReg - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - ldr r4, _08011B44 @ =0x00005051 - movs r0, 0x44 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0 - bl SetGpuReg - ldr r1, _08011B48 @ =gBattle_WIN0H - movs r0, 0xF0 - strh r0, [r1] - ldr r0, _08011B4C @ =gBattle_WIN0V - strh r4, [r0] - bl ScanlineEffect_Clear - ldr r0, _08011B50 @ =gScanlineEffectRegBuffers - movs r3, 0xF0 - movs r1, 0xF0 - lsls r1, 3 - adds r2, r0, r1 - movs r1, 0x4F -_08011A80: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _08011A80 - movs r1, 0x50 - ldr r0, _08011B50 @ =gScanlineEffectRegBuffers - ldr r3, _08011B54 @ =0x0000ff10 - movs r4, 0x82 - lsls r4, 4 - adds r2, r0, r4 - adds r0, 0xA0 -_08011A9C: - strh r3, [r0] - strh r3, [r2] - adds r2, 0x2 - adds r0, 0x2 - adds r1, 0x1 - cmp r1, 0x9F - ble _08011A9C - bl ResetPaletteFade - ldr r0, _08011B58 @ =gBattle_BG0_X - movs r4, 0 - strh r4, [r0] - ldr r0, _08011B5C @ =gBattle_BG0_Y - strh r4, [r0] - ldr r0, _08011B60 @ =gBattle_BG1_X - strh r4, [r0] - ldr r0, _08011B64 @ =gBattle_BG1_Y - strh r4, [r0] - ldr r0, _08011B68 @ =gBattle_BG2_X - strh r4, [r0] - ldr r0, _08011B6C @ =gBattle_BG2_Y - strh r4, [r0] - ldr r0, _08011B70 @ =gBattle_BG3_X - strh r4, [r0] - ldr r0, _08011B74 @ =gBattle_BG3_Y - strh r4, [r0] - bl sub_800F34C - ldr r0, _08011B78 @ =gBattleTextboxPalette - movs r1, 0 - movs r2, 0x40 - bl LoadCompressedPalette - bl sub_800F380 - bl ResetSpriteData - bl ResetTasks - bl sub_800FAE0 - movs r0, 0x4A - movs r1, 0x37 - bl SetGpuReg - bl FreeAllSpritePalettes - ldr r1, _08011B7C @ =gReservedSpritePaletteCount - movs r0, 0x4 - strb r0, [r1] - ldr r0, _08011B80 @ =VBlankCB_Battle - bl SetVBlankCallback - ldr r0, _08011B84 @ =sub_800F6FC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08011B88 @ =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_801184C - ldr r0, _08011B8C @ =sub_8011B94 - bl SetMainCallback2 - ldr r0, _08011B90 @ =gBattleCommunication - strb r4, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08011B40: .4byte 0x05006000 -_08011B44: .4byte 0x00005051 -_08011B48: .4byte gBattle_WIN0H -_08011B4C: .4byte gBattle_WIN0V -_08011B50: .4byte gScanlineEffectRegBuffers -_08011B54: .4byte 0x0000ff10 -_08011B58: .4byte gBattle_BG0_X -_08011B5C: .4byte gBattle_BG0_Y -_08011B60: .4byte gBattle_BG1_X -_08011B64: .4byte gBattle_BG1_Y -_08011B68: .4byte gBattle_BG2_X -_08011B6C: .4byte gBattle_BG2_Y -_08011B70: .4byte gBattle_BG3_X -_08011B74: .4byte gBattle_BG3_Y -_08011B78: .4byte gBattleTextboxPalette -_08011B7C: .4byte gReservedSpritePaletteCount -_08011B80: .4byte VBlankCB_Battle -_08011B84: .4byte sub_800F6FC -_08011B88: .4byte gTasks -_08011B8C: .4byte sub_8011B94 -_08011B90: .4byte gBattleCommunication - thumb_func_end sub_8011A1C - - thumb_func_start sub_8011B94 -sub_8011B94: @ 8011B94 - push {lr} - bl sub_8011BB0 - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - bl RunTasks - pop {r0} - bx r0 - thumb_func_end sub_8011B94 - thumb_func_start sub_8011BB0 sub_8011BB0: @ 8011BB0 push {r4,lr} diff --git a/asm/battle_setup.s b/asm/battle_setup.s index 64c45e06b..53ad48895 100644 --- a/asm/battle_setup.s +++ b/asm/battle_setup.s @@ -743,8 +743,8 @@ _0807FC54: .4byte gSpecialVar_Result _0807FC58: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic thumb_func_end sub_807FBF0 - thumb_func_start sub_807FC5C -sub_807FC5C: @ 807FC5C + thumb_func_start BattleSetup_GetTerrainId +BattleSetup_GetTerrainId: @ 807FC5C push {r4,r5,lr} sub sp, 0x4 mov r4, sp @@ -891,7 +891,7 @@ _0807FD88: pop {r4,r5} pop {r1} bx r1 - thumb_func_end sub_807FC5C + thumb_func_end BattleSetup_GetTerrainId thumb_func_start GetBattleTransitionTypeByMap GetBattleTransitionTypeByMap: @ 807FD90 diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index fd1cf3dc6..8f896ea7c 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -4012,8 +4012,8 @@ GetRfuPlayerCount: @ 80FA4EC _080FA4F4: .4byte gUnknown_3005450 thumb_func_end GetRfuPlayerCount - thumb_func_start IsRfuTaskFinished -IsRfuTaskFinished: @ 80FA4F8 + thumb_func_start IsLinkRfuTaskFinished +IsLinkRfuTaskFinished: @ 80FA4F8 push {lr} movs r1, 0 ldr r0, _080FA50C @ =gUnknown_3005450 @@ -4027,7 +4027,7 @@ _080FA506: bx r1 .align 2, 0 _080FA50C: .4byte gUnknown_3005450 - thumb_func_end IsRfuTaskFinished + thumb_func_end IsLinkRfuTaskFinished thumb_func_start sub_80FA510 sub_80FA510: @ 80FA510 diff --git a/asm/trade.s b/asm/trade.s index 3573dcfaf..426bbb112 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -422,7 +422,7 @@ _0804C9B0: ldrb r0, [r0] cmp r0, 0 beq _0804C9E8 - bl IsRfuTaskFinished + bl IsLinkRfuTaskFinished lsls r0, 24 cmp r0, 0 bne _0804C9C4 @@ -1832,7 +1832,7 @@ sub_804D5A4: @ 804D5A4 ldrb r0, [r0] cmp r0, 0 beq _0804D5FC - bl IsRfuTaskFinished + bl IsLinkRfuTaskFinished lsls r0, 24 cmp r0, 0 beq _0804D620 @@ -14745,7 +14745,7 @@ _0805434C: ldr r0, _08054378 @ =sub_804C718 cmp r1, r0 bne _08054384 - bl IsRfuTaskFinished + bl IsLinkRfuTaskFinished lsls r0, 24 cmp r0, 0 beq _08054396 diff --git a/include/battle.h b/include/battle.h index 3ec32e17f..d19c2c851 100644 --- a/include/battle.h +++ b/include/battle.h @@ -528,14 +528,10 @@ struct BattleStruct u16 hpOnSwitchout[2]; u8 abilityPreventingSwitchout; u8 hpScale; - u8 field_AE; - u8 field_AF; - u8 field_B0; - u8 field_B1; - u8 field_B2; - u8 field_B3; + u16 savedBattleTypeFlags; // ??? + void (*savedCallback)(void); u8 synchronizeMoveEffect; - u8 field_B5; + u8 multiplayerId; u8 field_B6; u8 atkCancellerTracker; u16 usedHeldItems[MAX_BATTLERS_COUNT]; @@ -556,7 +552,12 @@ struct BattleStruct u8 wishPerishSongBattlerId; u8 field_182; u8 field_183; - u8 field_184[124]; // currently unknown + u8 field_184; + u8 field_185; + u8 field_186; + u8 field_187; + struct BattleEnigmaBerry battleEnigmaBerry; + u8 field_1A4[0x5C]; // currently unknown }; // size == 0x200 bytes extern struct BattleStruct *gBattleStruct; @@ -929,5 +930,7 @@ extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT]; extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT]; extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT]; extern u8 gBattleTerrain; +extern struct UnknownPokemonStruct4 gUnknown_2022B58[3]; +extern u16 *gUnknown_2022BC0; #endif // GUARD_BATTLE_H diff --git a/include/battle_bg.h b/include/battle_bg.h index 6bf90a104..9449e3f73 100644 --- a/include/battle_bg.h +++ b/include/battle_bg.h @@ -2,5 +2,8 @@ #define GUARD_BATTLE_BG_H void sub_800F34C(void); +void DrawBattleEntryBackground(void); +void sub_800F6FC(u8 taskId); +void LoadBattleMenuWindowGfx(void); #endif // GUARD_BATTLE_BG_H diff --git a/include/berry.h b/include/berry.h index 0e554a789..d55192301 100644 --- a/include/berry.h +++ b/include/berry.h @@ -63,7 +63,7 @@ void FieldObjectInteractionRemoveBerryTree(void); u8 PlayerHasBerries(void); void ResetBerryTreeSparkleFlags(void); void sub_809C794(void); -const struct Berry * sub_809C8A0(u8 berryIdx); +const struct Berry * GetBerryInfo(u8 berryIdx); extern const struct Berry gBerries[]; diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 1aad499a1..73244ba90 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -1,6 +1,8 @@ #ifndef GUARD_TRAINERS_H #define GUARD_TRAINERS_H +#define TRAINER_SECRET_BASE 1024 + #define F_TRAINER_FEMALE (1 << 7) // All trainer parties specify the IV, level, and species for each Pokémon in the diff --git a/include/link_rfu.h b/include/link_rfu.h index 2be9dd3c9..f5aa682e6 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -11,7 +11,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src); void sub_80FA190(void); void MG_DrawCheckerboardPattern(void); void task_add_05_task_del_08FA224_when_no_RfuFunc(void); -bool8 IsRfuTaskFinished(void); +bool8 IsLinkRfuTaskFinished(void); void DestroyWirelessStatusIndicatorSprite(void); void MEvent_CreateTask_CardOrNewsWithFriend(u8); void MEvent_CreateTask_CardOrNewsOverWireless(u8); diff --git a/include/party_menu.h b/include/party_menu.h index 5b9b6e1c4..6d124e14e 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -84,5 +84,6 @@ bool8 IsMultiBattle(void); void sub_8126EDC(void); void PartyMenuInit_FromPlayerPc(void); void CB2_PartyMenuFromStartMenu(void); +void sub_8128198(void); #endif // GUARD_PARTY_MENU_H diff --git a/src/battle_main.c b/src/battle_main.c index a109afbba..ebf775d7f 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -29,6 +29,7 @@ #include "m4a.h" #include "palette.h" #include "party_menu.h" +#include "help_system.h" #include "pokeball.h" #include "pokedex.h" #include "pokemon.h" @@ -76,6 +77,17 @@ void HandleEndTurn_BattleLost(void); void HandleEndTurn_RanFromBattle(void); void HandleEndTurn_MonFled(void); void HandleEndTurn_FinishBattle(void); +void CB2_InitBattleInternal(void); +void CB2_PreInitMultiBattle(void); +void CB2_HandleStartMultiBattle(void); +u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum); +void CB2_HandleStartBattle(void); +void TryCorrectShedinjaLanguage(struct Pokemon *mon); +void BattleMainCB1(void); +void CB2_QuitPokeDudeBattle(void); +void sub_80111FC(struct Sprite *sprite); +void sub_8011B94(void); +void sub_8011BB0(void); // TODO: put ewram variables here after resolving symbol ref in between @@ -465,3 +477,1182 @@ const u8 *const gStatusConditionStringsTable[7][2] = {gStatusConditionString_ConfusionJpn, gText_Confusion}, {gStatusConditionString_LoveJpn, gText_Love} }; + +void CB2_InitBattle(void) +{ + MoveSaveBlocks_ResetHeap(); + AllocateBattleResources(); + AllocateBattleSpritesData(); + AllocateMonSpritesGfx(); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + HandleLinkBattleSetup(); + SetMainCallback2(CB2_PreInitMultiBattle); + gBattleCommunication[MULTIUSE_STATE] = 0; + } + else + { + CB2_InitBattleInternal(); + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + HelpSystem_SetSomeVariable2(0x19); + else + HelpSystem_SetSomeVariable2(0x18); + } + else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + HelpSystem_SetSomeVariable2(0x1A); + } + else + { + HelpSystem_SetSomeVariable2(0x17); + } + } + } +} + +void CB2_InitBattleInternal(void) +{ + s32 i; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0x50, 0x51)); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gBattle_WIN0H = WIN_RANGE(0, 0xF0); + gBattle_WIN0V = WIN_RANGE(0x50, 0x51); + ScanlineEffect_Clear(); + for (i = 0; i < 80; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; + } + for (; i < 160; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; + } + ScanlineEffect_SetParams(sIntroScanlineParams16Bit); + ResetPaletteFade(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + gBattleTerrain = BattleSetup_GetTerrainId(); + sub_800F34C(); + LoadBattleTextboxAndBackground(); + ResetSpriteData(); + ResetTasks(); + DrawBattleEntryBackground(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(VBlankCB_Battle); + SetUpBattleVars(); + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + SetMainCallback2(CB2_HandleStartMultiBattle); + else + SetMainCallback2(CB2_HandleStartBattle); + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + CreateNPCTrainerParty(&gEnemyParty[0], gTrainerBattleOpponent_A); + SetWildMonHeldItem(); + } + gMain.inBattle = TRUE; + for (i = 0; i < PARTY_SIZE; ++i) + AdjustFriendship(&gPlayerParty[i], 3); + gBattleCommunication[MULTIUSE_STATE] = 0; +} + +void sub_800FFEC(void) +{ + u16 r6 = 0; + u16 species = SPECIES_NONE; + u16 hp = 0; + u32 status = 0; + s32 i; + + for (i = 0; i < PARTY_SIZE; ++i) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r6 |= 1 << i * 2; + if (species == SPECIES_NONE) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r6 |= 2 << i * 2; + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp == 0) + r6 |= 3 << i * 2; + } + gBattleStruct->field_186 = r6; + *(&gBattleStruct->field_187) = r6 >> 8; +} + +void SetPlayerBerryDataInBattleStruct(void) +{ + s32 i; + struct BattleStruct *battleStruct = gBattleStruct; + struct BattleEnigmaBerry *battleBerry = &battleStruct->battleEnigmaBerry; + + if (IsEnigmaBerryValid() == TRUE) + { + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + battleBerry->name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i]; + battleBerry->name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + battleBerry->itemEffect[i] = gSaveBlock1Ptr->enigmaBerry.itemEffect[i]; + battleBerry->holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + battleBerry->holdEffectParam = gSaveBlock1Ptr->enigmaBerry.holdEffectParam; + } + else + { + const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); + + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + battleBerry->name[i] = berryData->name[i]; + battleBerry->name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + battleBerry->itemEffect[i] = 0; + battleBerry->holdEffect = HOLD_EFFECT_NONE; + battleBerry->holdEffectParam = 0; + } +} + +void SetAllPlayersBerryData(void) +{ + s32 i, j; + + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + if (IsEnigmaBerryValid() == TRUE) + { + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + { + gEnigmaBerries[0].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i]; + gEnigmaBerries[2].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i]; + } + gEnigmaBerries[0].name[i] = EOS; + gEnigmaBerries[2].name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + { + gEnigmaBerries[0].itemEffect[i] = gSaveBlock1Ptr->enigmaBerry.itemEffect[i]; + gEnigmaBerries[2].itemEffect[i] = gSaveBlock1Ptr->enigmaBerry.itemEffect[i]; + } + gEnigmaBerries[0].holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + gEnigmaBerries[2].holdEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; + gEnigmaBerries[0].holdEffectParam = gSaveBlock1Ptr->enigmaBerry.holdEffectParam; + gEnigmaBerries[2].holdEffectParam = gSaveBlock1Ptr->enigmaBerry.holdEffectParam; + } + else + { + const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); + + for (i = 0; i < BERRY_NAME_LENGTH; ++i) + { + gEnigmaBerries[0].name[i] = berryData->name[i]; + gEnigmaBerries[2].name[i] = berryData->name[i]; + } + gEnigmaBerries[0].name[i] = EOS; + gEnigmaBerries[2].name[i] = EOS; + for (i = 0; i < BERRY_ITEM_EFFECT_COUNT; ++i) + { + gEnigmaBerries[0].itemEffect[i] = 0; + gEnigmaBerries[2].itemEffect[i] = 0; + } + gEnigmaBerries[0].holdEffect = HOLD_EFFECT_NONE; + gEnigmaBerries[2].holdEffect = HOLD_EFFECT_NONE; + gEnigmaBerries[0].holdEffectParam = 0; + gEnigmaBerries[2].holdEffectParam = 0; + } + } + else + { + s32 numPlayers; + struct BattleEnigmaBerry *src; + u8 battlerId; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + for (i = 0; i < 4; ++i) + { + src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); + battlerId = gLinkPlayers[i].id; + for (j = 0; j < BERRY_NAME_LENGTH; ++j) + gEnigmaBerries[battlerId].name[j] = src->name[j]; + gEnigmaBerries[battlerId].name[j] = EOS; + for (j = 0; j < BERRY_ITEM_EFFECT_COUNT; ++j) + gEnigmaBerries[battlerId].itemEffect[j] = src->itemEffect[j]; + gEnigmaBerries[battlerId].holdEffect = src->holdEffect; + gEnigmaBerries[battlerId].holdEffectParam = src->holdEffectParam; + } + } + else + { + for (i = 0; i < 2; ++i) + { + src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); + for (j = 0; j < BERRY_NAME_LENGTH; ++j) + { + gEnigmaBerries[i].name[j] = src->name[j]; + gEnigmaBerries[i + 2].name[j] = src->name[j]; + } + gEnigmaBerries[i].name[j] = EOS; + gEnigmaBerries[i + 2].name[j] = EOS; + for (j = 0; j < BERRY_ITEM_EFFECT_COUNT; ++j) + { + gEnigmaBerries[i].itemEffect[j] = src->itemEffect[j]; + gEnigmaBerries[i + 2].itemEffect[j] = src->itemEffect[j]; + } + gEnigmaBerries[i].holdEffect = src->holdEffect; + gEnigmaBerries[i + 2].holdEffect = src->holdEffect; + gEnigmaBerries[i].holdEffectParam = src->holdEffectParam; + gEnigmaBerries[i + 2].holdEffectParam = src->holdEffectParam; + } + } + } +} + +void sub_8010414(u8 arg0, u8 arg1) +{ + u8 var = 0; + + if (gBlockRecvBuffer[0][0] == 256) + { + if (arg1 == 0) + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; + else + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + ++var; + } + if (var == 0) + { + s32 i; + + for (i = 0; i < arg0; ++i) + if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) + break; + if (i == arg0) + { + if (arg1 == 0) + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; + else + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + ++var; + } + if (var == 0) + { + for (i = 0; i < arg0; ++i) + { + if (gBlockRecvBuffer[i][0] == 0x201) + if (i != arg1 && i < arg1) + break; + if (gBlockRecvBuffer[i][0] > 0x201 && i != arg1) + break; + } + if (i == arg0) + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; + else + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + } + } +} + +void CB2_HandleStartBattle(void) +{ + u8 playerMultiplayerId; + u8 enemyMultiplayerId; + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + playerMultiplayerId = GetMultiplayerId(); + gBattleStruct->multiplayerId = playerMultiplayerId; + enemyMultiplayerId = playerMultiplayerId ^ BIT_SIDE; + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + if (!IsDma3ManagerBusyWithBgCopy()) + { + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + sub_80357C8(); + gBattleCommunication[MULTIUSE_STATE] = 1; + } + if (gWirelessCommType) + LoadWirelessStatusIndicatorSpriteGfx(); + break; + case 1: + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gReceivedRemoteLinkPlayers != 0) + { + if (IsLinkTaskFinished()) + { + *(&gBattleStruct->field_184) = 1; + *(&gBattleStruct->field_185) = 2; + sub_800FFEC(); + SetPlayerBerryDataInBattleStruct(); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); + gBattleCommunication[MULTIUSE_STATE] = 2; + } + if (gWirelessCommType != 0) + CreateWirelessStatusIndicatorSprite(0, 0); + } + } + else + { + gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER; + gBattleCommunication[MULTIUSE_STATE] = 15; + SetAllPlayersBerryData(); + } + break; + case 2: + if ((GetBlockReceivedStatus() & 3) == 3) + { + u8 taskId; + + ResetBlockReceivedFlags(); + sub_8010414(2, playerMultiplayerId); + SetAllPlayersBerryData(); + taskId = CreateTask(sub_800F6FC, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[3] = gBattleStruct->field_186 | (gBattleStruct->field_187 << 8); + gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1]; + SetDeoxysStats(); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 3: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 4: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 7: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 8: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 11: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 12: + if ((GetBlockReceivedStatus() & 3) == 3) + { + ResetBlockReceivedFlags(); + memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + TryCorrectShedinjaLanguage(&gEnemyParty[0]); + TryCorrectShedinjaLanguage(&gEnemyParty[1]); + TryCorrectShedinjaLanguage(&gEnemyParty[2]); + TryCorrectShedinjaLanguage(&gEnemyParty[3]); + TryCorrectShedinjaLanguage(&gEnemyParty[4]); + TryCorrectShedinjaLanguage(&gEnemyParty[5]); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 15: + sub_800D30C(); + ++gBattleCommunication[MULTIUSE_STATE]; + gBattleCommunication[SPRITES_INIT_STATE1] = 0; + gBattleCommunication[SPRITES_INIT_STATE2] = 0; + break; + case 16: + if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) + { + gPreBattleCallback1 = gMain.callback1; + gMain.callback1 = BattleMainCB1; + SetMainCallback2(BattleMainCB2); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTypeFlags |= BATTLE_TYPE_20; + } + } + break; + case 5: + case 9: + case 13: + ++gBattleCommunication[MULTIUSE_STATE]; + gBattleCommunication[1] = 1; + case 6: + case 10: + case 14: + if (--gBattleCommunication[1] == 0) + ++gBattleCommunication[MULTIUSE_STATE]; + break; + } +} + +void sub_80108C4(void) +{ + s32 i, j; + u8 *nick, *cur; + + for (i = 0; i < 3; ++i) + { + gUnknown_2022B58[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES); + gUnknown_2022B58[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + nick = gUnknown_2022B58[i].nickname; + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick); + gUnknown_2022B58[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + gUnknown_2022B58[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + gUnknown_2022B58[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_2022B58[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); + gUnknown_2022B58[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + gUnknown_2022B58[i].gender = GetMonGender(&gPlayerParty[i]); + StripExtCtrlCodes(nick); + if (GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) + { + for (cur = nick, j = 0; cur[j] != EOS; ++j) + ; + while (j < 6) + cur[j++] = 0; + cur[j] = EOS; + } + } + memcpy(&gBattleStruct->field_184, gUnknown_2022B58, sizeof(gUnknown_2022B58)); +} + +void CB2_PreInitMultiBattle(void) +{ + s32 i; + u8 playerMultiplierId; + u8 r4 = 0xF; + u16 *savedBattleTypeFlags; // ??? + void (**savedCallback)(void); + + playerMultiplierId = GetMultiplayerId(); + gBattleStruct->multiplayerId = playerMultiplierId; + savedCallback = &gBattleStruct->savedCallback; + savedBattleTypeFlags = &gBattleStruct->savedBattleTypeFlags; + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) + { + sub_80108C4(); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, sizeof(gUnknown_2022B58)); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 1: + if ((GetBlockReceivedStatus() & r4) == r4) + { + ResetBlockReceivedFlags(); + for (i = 0; i < 4; ++i) + { + if (i == playerMultiplierId) + continue; + if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerMultiplierId].id & 1)) + || (gLinkPlayers[i].id & 1 && gLinkPlayers[playerMultiplierId].id & 1)) + memcpy(gUnknown_2022B58, gBlockRecvBuffer[i], sizeof(gUnknown_2022B58)); + } + ++gBattleCommunication[MULTIUSE_STATE]; + *savedCallback = gMain.savedCallback; + *savedBattleTypeFlags = gBattleTypeFlags; + gMain.savedCallback = CB2_PreInitMultiBattle; + sub_8128198(); + } + break; + case 2: + if (!gPaletteFade.active) + { + ++gBattleCommunication[MULTIUSE_STATE]; + if (gWirelessCommType) + sub_800AB9C(); + else + sub_800AAC0(); + } + break; + case 3: + if (gWirelessCommType) + { + if (IsLinkRfuTaskFinished()) + { + gBattleTypeFlags = *savedBattleTypeFlags; + gMain.savedCallback = *savedCallback; + SetMainCallback2(CB2_InitBattleInternal); + } + } + else if (gReceivedRemoteLinkPlayers == 0) + { + gBattleTypeFlags = *savedBattleTypeFlags; + gMain.savedCallback = *savedCallback; + SetMainCallback2(CB2_InitBattleInternal); + } + break; + } +} + +void CB2_HandleStartMultiBattle(void) +{ + u8 playerMultiplayerId; + s32 id; + u8 taskId; + + playerMultiplayerId = GetMultiplayerId(); + gBattleStruct->multiplayerId = playerMultiplayerId; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + switch (gBattleCommunication[MULTIUSE_STATE]) + { + case 0: + if (!IsDma3ManagerBusyWithBgCopy()) + { + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + sub_80357C8(); + gBattleCommunication[MULTIUSE_STATE] = 1; + } + if (gWirelessCommType) + LoadWirelessStatusIndicatorSpriteGfx(); + break; + case 1: + if (gReceivedRemoteLinkPlayers != 0) + { + if (IsLinkTaskFinished()) + { + *(&gBattleStruct->field_184) = 1; + *(&gBattleStruct->field_185) = 2; + sub_800FFEC(); + SetPlayerBerryDataInBattleStruct(); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); + ++gBattleCommunication[MULTIUSE_STATE]; + } + if (gWirelessCommType) + CreateWirelessStatusIndicatorSprite(0, 0); + } + break; + case 2: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + sub_8010414(4, playerMultiplayerId); + SetAllPlayersBerryData(); + SetDeoxysStats(); + memcpy(gDecompressionBuffer, gPlayerParty, sizeof(struct Pokemon) * 3); + taskId = CreateTask(sub_800F6FC, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; + 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].id) + { + 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; + } + } + ZeroPlayerPartyMons(); + ZeroEnemyPartyMons(); + ++gBattleCommunication[MULTIUSE_STATE]; + } + else + { + break; + } + // fall through + case 3: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, sizeof(struct Pokemon) * 2); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 4: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; ++id) + { + if (id == playerMultiplayerId) + { + switch (gLinkPlayers[id].id) + { + 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].id & 1) && !(gLinkPlayers[playerMultiplayerId].id & 1)) + || ((gLinkPlayers[id].id & 1) && (gLinkPlayers[playerMultiplayerId].id & 1))) + { + switch (gLinkPlayers[id].id) + { + 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].id) + { + 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; + } + } + } + } + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 7: + if (IsLinkTaskFinished()) + { + SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon)); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 8: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + ResetBlockReceivedFlags(); + for (id = 0; id < MAX_LINK_PLAYERS; ++id) + { + if (id == playerMultiplayerId) + { + switch (gLinkPlayers[id].id) + { + 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].id & 1) && !(gLinkPlayers[playerMultiplayerId].id & 1)) + || ((gLinkPlayers[id].id & 1) && (gLinkPlayers[playerMultiplayerId].id & 1))) + { + switch (gLinkPlayers[id].id) + { + 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].id) + { + 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; + } + } + } + } + TryCorrectShedinjaLanguage(&gPlayerParty[0]); + TryCorrectShedinjaLanguage(&gPlayerParty[1]); + TryCorrectShedinjaLanguage(&gPlayerParty[2]); + TryCorrectShedinjaLanguage(&gPlayerParty[3]); + TryCorrectShedinjaLanguage(&gPlayerParty[4]); + TryCorrectShedinjaLanguage(&gPlayerParty[5]); + TryCorrectShedinjaLanguage(&gEnemyParty[0]); + TryCorrectShedinjaLanguage(&gEnemyParty[1]); + TryCorrectShedinjaLanguage(&gEnemyParty[2]); + TryCorrectShedinjaLanguage(&gEnemyParty[3]); + TryCorrectShedinjaLanguage(&gEnemyParty[4]); + TryCorrectShedinjaLanguage(&gEnemyParty[5]); + ++gBattleCommunication[MULTIUSE_STATE]; + } + break; + case 11: + sub_800D30C(); + ++gBattleCommunication[MULTIUSE_STATE]; + gBattleCommunication[SPRITES_INIT_STATE1] = 0; + gBattleCommunication[SPRITES_INIT_STATE2] = 0; + break; + case 12: + if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) + { + gPreBattleCallback1 = gMain.callback1; + gMain.callback1 = BattleMainCB1; + SetMainCallback2(BattleMainCB2); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + gBattleTypeFlags |= BATTLE_TYPE_20; + } + break; + case 5: + case 9: + ++gBattleCommunication[0]; + gBattleCommunication[SPRITES_INIT_STATE1] = 1; + // fall through + case 6: + case 10: + if (--gBattleCommunication[SPRITES_INIT_STATE1] == 0) + ++gBattleCommunication[0]; + break; + } +} + +void BattleMainCB2(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); + if (JOY_HELD(B_BUTTON) && gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) + { + gSpecialVar_Result = gBattleOutcome = B_OUTCOME_DREW; + ResetPaletteFadeControl(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + SetMainCallback2(CB2_QuitPokeDudeBattle); + } +} + +void FreeRestoreBattleData(void) +{ + gMain.callback1 = gPreBattleCallback1; + gScanlineEffect.state = 3; + gMain.inBattle = FALSE; + ZeroEnemyPartyMons(); + m4aSongNumStop(SE_HINSI); + FreeMonSpritesGfx(); + FreeBattleSpritesData(); + FreeBattleResources(); +} + +void CB2_QuitPokeDudeBattle(void) +{ + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + FreeRestoreBattleData(); + FreeAllWindowBuffers(); + SetMainCallback2(gMain.savedCallback); + } +} + +void sub_80111EC(struct Sprite *sprite) +{ + sprite->data[0] = 0; + sprite->callback = sub_80111FC; +} + +void sub_80111FC(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + gUnknown_2022BC0 = AllocZeroed(0x1000); + ++sprite->data[0]; + sprite->data[1] = 0; + sprite->data[2] = 0x281; + sprite->data[3] = 0; + sprite->data[4] = 1; + // fall through + case 1: + if (--sprite->data[4] == 0) + { + s32 i, r2, r0; + + sprite->data[4] = 2; + r2 = sprite->data[1] + sprite->data[3] * 32; + r0 = sprite->data[2] - sprite->data[3] * 32; + for (i = 0; i <= 29; i += 2) + { + *(&gUnknown_2022BC0[r2] + i) = 0x3D; + *(&gUnknown_2022BC0[r0] + i) = 0x3D; + } + if (++sprite->data[3] == 21) + { + ++sprite->data[0]; + sprite->data[1] = 32; + } + } + break; + case 2: + if (--sprite->data[1] == 20) + { + if (gUnknown_2022BC0 != NULL) + { + memset(gUnknown_2022BC0, 0, 0x1000); + FREE_AND_SET_NULL(gUnknown_2022BC0); + } + SetMainCallback2(CB2_InitBattle); + } + break; + } +} + +u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) +{ + u32 nameHash = 0; + u32 personalityValue; + u8 fixedIV; + s32 i, j; + + if (trainerNum == TRAINER_SECRET_BASE) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER + && !(gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_TOWER))) + { + ZeroEnemyPartyMons(); + for (i = 0; i < gTrainers[trainerNum].partySize; ++i) + { + + if (gTrainers[trainerNum].doubleBattle == TRUE) + personalityValue = 0x80; + else if (gTrainers[trainerNum].encounterMusic_gender & 0x80) + personalityValue = 0x78; + else + personalityValue = 0x88; + for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; ++j) + nameHash += gTrainers[trainerNum].trainerName[j]; + switch (gTrainers[trainerNum].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerNum].party.NoItemDefaultMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + break; + } + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerNum].party.NoItemCustomMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerNum].party.ItemDefaultMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + break; + } + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerNum].party.ItemCustomMoves; + + for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; ++j) + nameHash += gSpeciesNames[partyData[i].species][j]; + personalityValue += nameHash << 8; + fixedIV = partyData[i].iv * 31 / 255; + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + break; + } + } + } + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; + } + return gTrainers[trainerNum].partySize; +} + +// not used +void sub_80116CC(void) +{ + if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F) + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x512; +} + +void VBlankCB_Battle(void) +{ + // Change gRngSeed every vblank. + Random(); + SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); + SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); + SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); + SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X); + SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y); + SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H); + SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V); + SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN1H); + SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void nullsub_9(struct Sprite *sprite) +{ +} + +void sub_80117BC(struct Sprite *sprite) +{ + if (sprite->data[0] != 0) + sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8); + else + sprite->pos1.x = sprite->data[1] - ((sprite->data[2] & 0xFF00) >> 8); + sprite->data[2] += 0x180; + if (sprite->affineAnimEnded) + { + FreeSpriteTilesByTag(ANIM_SPRITES_START); + FreeSpritePaletteByTag(ANIM_SPRITES_START); + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +void sub_801182C(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80117BC; + PlaySE(SE_BT_START); +} + +void sub_801184C(u8 taskId) +{ + struct Pokemon *party1 = NULL; + struct Pokemon *party2 = NULL; + u8 multiplayerId = gBattleStruct->multiplayerId; + u32 r7; + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + switch (gLinkPlayers[multiplayerId].id) + { + case 0: + case 2: + party1 = gPlayerParty; + party2 = gEnemyParty; + break; + case 1: + case 3: + party1 = gEnemyParty; + party2 = gPlayerParty; + break; + } + } + else + { + party1 = gPlayerParty; + party2 = gEnemyParty; + } + r7 = 0; + for (i = 0; i < PARTY_SIZE; ++i) + { + u16 species = GetMonData(&party1[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&party1[i], MON_DATA_HP); + u32 status = GetMonData(&party1[i], MON_DATA_STATUS); + + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + + if (species == SPECIES_NONE) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[3] = r7; + r7 = 0; + for (i = 0; i < PARTY_SIZE; ++i) + { + u16 species = GetMonData(&party2[i], MON_DATA_SPECIES2); + u16 hp = GetMonData(&party2[i], MON_DATA_HP); + u32 status = GetMonData(&party2[i], MON_DATA_STATUS); + + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp != 0 && status == 0) + r7 |= 1 << i * 2; + if (species == SPECIES_NONE) + continue; + if (hp != 0 && (species == SPECIES_EGG || status != 0)) + r7 |= 2 << i * 2; + if (species == SPECIES_NONE) + continue; + if (species != SPECIES_EGG && hp == 0) + r7 |= 3 << i * 2; + } + gTasks[taskId].data[4] = r7; +} + +void sub_8011A1C(void) +{ + s32 i; + u8 taskId; + + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0x50, 0x51)); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gBattle_WIN0H = WIN_RANGE(0, 0xF0); + gBattle_WIN0V = WIN_RANGE(0x50, 0x51); + ScanlineEffect_Clear(); + + for (i = 0; i < 80; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; + } + + for (; i < 160; ++i) + { + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; + } + ResetPaletteFade(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + sub_800F34C(); + LoadCompressedPalette(gBattleTextboxPalette, 0, 64); + LoadBattleMenuWindowGfx(); + ResetSpriteData(); + ResetTasks(); + DrawBattleEntryBackground(); + SetGpuReg(REG_OFFSET_WINOUT, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + SetVBlankCallback(VBlankCB_Battle); + taskId = CreateTask(sub_800F6FC, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; + gTasks[taskId].data[5] = 1; + sub_801184C(taskId); + SetMainCallback2(sub_8011B94); + gBattleCommunication[MULTIUSE_STATE] = 0; +} + +void sub_8011B94(void) +{ + sub_8011BB0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + RunTasks(); +} diff --git a/src/berry.c b/src/berry.c index 91d83f40c..d349109d2 100644 --- a/src/berry.c +++ b/src/berry.c @@ -134,7 +134,7 @@ bool32 IsEnigmaBerryValid(void) return TRUE; } -const struct Berry * sub_809C8A0(u8 berryIdx) +const struct Berry * GetBerryInfo(u8 berryIdx) { if (berryIdx == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid()) return (struct Berry *)&gSaveBlock1Ptr->enigmaBerry.berry; @@ -163,7 +163,7 @@ u16 BerryTypeToItemId(u16 berryType) void GetBerryNameByBerryType(u8 berryType, u8 * dest) { - const struct Berry * berry = sub_809C8A0(berryType); + const struct Berry * berry = GetBerryInfo(berryType); memcpy(dest, berry->name, 6); dest[6] = EOS; } diff --git a/src/item.c b/src/item.c index 42dfd334e..750c4481d 100644 --- a/src/item.c +++ b/src/item.c @@ -73,7 +73,7 @@ void CopyItemName(u16 itemId, u8 * dest) { if (itemId == ITEM_ENIGMA_BERRY) { - StringCopy(dest, sub_809C8A0(43)->name); + StringCopy(dest, GetBerryInfo(43)->name); StringAppend(dest, gUnknown_84162BD); } else diff --git a/src/link.c b/src/link.c index 52f5aeddb..bb0401907 100644 --- a/src/link.c +++ b/src/link.c @@ -1025,7 +1025,7 @@ bool8 IsLinkTaskFinished(void) { if (gWirelessCommType == 1) { - return IsRfuTaskFinished(); + return IsLinkRfuTaskFinished(); } return gLinkCallback == NULL; } diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 395c4e374..0af851edb 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -1374,7 +1374,7 @@ void task00_mystery_gift(u8 taskId) } break; case 13: - if (IsRfuTaskFinished()) + if (IsLinkRfuTaskFinished()) { DestroyWirelessStatusIndicatorSprite(); data->state = 14; @@ -1650,7 +1650,7 @@ void task00_mystery_gift(u8 taskId) data->state = 34; break; case 34: - if (IsRfuTaskFinished()) + if (IsLinkRfuTaskFinished()) { DestroyWirelessStatusIndicatorSprite(); data->state = 35; diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c index 2687e4ea5..c7c7d1f53 100644 --- a/src/quest_log_battle.c +++ b/src/quest_log_battle.c @@ -141,7 +141,7 @@ void sub_812C224(void) } for (r3 = 0; r3 < 7; r3++) { - r5->v1[0][r3] = gLinkPlayers[gBattleStruct->field_B5 ^ 1].name[r3]; + r5->v1[0][r3] = gLinkPlayers[gBattleStruct->multiplayerId ^ 1].name[r3]; } } sub_8113550(r8, (const u16 *)r5); @@ -153,12 +153,12 @@ void sub_812C334(s32 * a0, s32 * a1) { s32 r5; s32 _optimized_out = 0; - u8 r2 = gLinkPlayers[gBattleStruct->field_B5].id ^ 2; + u8 r2 = gLinkPlayers[gBattleStruct->multiplayerId].id ^ 2; for (r5 = 0; r5 < 4; r5++) { if (r2 == gLinkPlayers[r5].id) a0[0] = r5; - else if (r5 != gBattleStruct->field_B5) + else if (r5 != gBattleStruct->multiplayerId) a1[_optimized_out++] = r5; } } |