summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-10-16 13:38:21 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-10-17 02:01:07 +0800
commitf03807931fa6451c446dc931cd755c697f7177a4 (patch)
tree05e5871bf1d02e33f57a5e95905b49e14c90a1d3
parenta6c0088073949fe3007bf600fd2de8948b3874a7 (diff)
thru sub_8011B94
-rw-r--r--asm/battle_1.s16
-rw-r--r--asm/battle_2.s3671
-rw-r--r--asm/battle_setup.s6
-rw-r--r--asm/link_rfu_2.s6
-rw-r--r--asm/trade.s6
-rw-r--r--include/battle.h19
-rw-r--r--include/battle_bg.h3
-rw-r--r--include/berry.h2
-rw-r--r--include/constants/trainers.h2
-rw-r--r--include/link_rfu.h2
-rw-r--r--include/party_menu.h1
-rw-r--r--src/battle_main.c1191
-rw-r--r--src/berry.c4
-rw-r--r--src/item.c2
-rw-r--r--src/link.c2
-rw-r--r--src/mystery_gift_menu.c4
-rw-r--r--src/quest_log_battle.c6
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;
}
}