summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2017-05-10 21:54:23 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2017-05-10 19:54:23 -0700
commita030e780e70d9dcd023835449093485358c73629 (patch)
tree880e3a63b9f1091a90408445b223552b25fcc9fb
parenta3001a290e35296b016bc55be569a611141ce88e (diff)
decompile sub_800F298 (#290)
decompile sub_800F298
-rw-r--r--asm/battle_2.s690
-rw-r--r--src/battle_2.c297
2 files changed, 283 insertions, 704 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 300c53114..22ede0c37 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -6,696 +6,6 @@
.text
- thumb_func_start sub_800F298
-sub_800F298: @ 800F298
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0800F2D0 @ =0x02000000
- ldr r1, _0800F2D4 @ =0x000160cb
- adds r0, r1
- strb r6, [r0]
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- ldr r0, _0800F2D8 @ =gUnknown_02024D1E
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _0800F2C4
- b _0800F7E0
-_0800F2C4:
- lsls r0, 2
- ldr r1, _0800F2DC @ =_0800F2E0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800F2D0: .4byte 0x02000000
-_0800F2D4: .4byte 0x000160cb
-_0800F2D8: .4byte gUnknown_02024D1E
-_0800F2DC: .4byte _0800F2E0
- .align 2, 0
-_0800F2E0:
- .4byte _0800F300
- .4byte _0800F340
- .4byte _0800F4DE
- .4byte _0800F504
- .4byte _0800F5F8
- .4byte _0800F61C
- .4byte _0800F78C
- .4byte _0800F7A4
-_0800F300:
- ldr r0, _0800F338 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800F30A
- b _0800F7E0
-_0800F30A:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F316
- b _0800F7E0
-_0800F316:
- ldr r4, _0800F33C @ =0x02000000
- movs r0, 0x1
- strb r0, [r4]
- strb r0, [r4, 0x1]
- bl sub_800E9EC
- bl sub_800EAAC
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0x20
- bl SendBlock
- b _0800F770
- .align 2, 0
-_0800F338: .4byte gReceivedRemoteLinkPlayers
-_0800F33C: .4byte 0x02000000
-_0800F340:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- beq _0800F34E
- b _0800F7E0
-_0800F34E:
- bl ResetBlockReceivedFlags
- movs r4, 0
- ldr r0, _0800F36C @ =gBlockRecvBuffer
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- cmp r1, r0
- bne _0800F380
- cmp r6, 0
- bne _0800F374
- ldr r0, _0800F370 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800F37A
- .align 2, 0
-_0800F36C: .4byte gBlockRecvBuffer
-_0800F370: .4byte gBattleTypeFlags
-_0800F374:
- ldr r0, _0800F3B0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800F37A:
- orrs r1, r2
- strh r1, [r0]
- adds r4, 0x1
-_0800F380:
- cmp r4, 0
- bne _0800F41C
- movs r2, 0
- ldr r1, _0800F3B4 @ =gBlockRecvBuffer
- adds r5, r1, 0
- movs r3, 0x80
- lsls r3, 1
-_0800F38E:
- adds r1, r3
- adds r2, 0x1
- cmp r2, 0x3
- bgt _0800F39E
- ldrh r0, [r5]
- ldrh r7, [r1]
- cmp r0, r7
- beq _0800F38E
-_0800F39E:
- cmp r2, 0x4
- bne _0800F3C4
- cmp r6, 0
- bne _0800F3B8
- ldr r0, _0800F3B0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800F3BE
- .align 2, 0
-_0800F3B0: .4byte gBattleTypeFlags
-_0800F3B4: .4byte gBlockRecvBuffer
-_0800F3B8:
- ldr r0, _0800F408 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800F3BE:
- orrs r1, r2
- strh r1, [r0]
- adds r4, 0x1
-_0800F3C4:
- cmp r4, 0
- bne _0800F41C
- ldr r0, _0800F40C @ =gBlockRecvBuffer
- ldrh r2, [r0]
- ldr r1, _0800F410 @ =0x00000101
- adds r3, r0, 0
- ldr r5, _0800F408 @ =gBattleTypeFlags
- cmp r2, r1
- beq _0800F3F6
-_0800F3D6:
- lsls r0, r4, 8
- adds r0, r3
- ldrh r0, [r0]
- ldr r1, _0800F410 @ =0x00000101
- cmp r0, r1
- bls _0800F3E6
- cmp r4, r6
- bne _0800F3FE
-_0800F3E6:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0800F3FE
- lsls r0, r4, 8
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, r1
- bne _0800F3D6
-_0800F3F6:
- cmp r4, r6
- beq _0800F3D6
- cmp r4, r6
- bge _0800F3D6
-_0800F3FE:
- cmp r4, 0x4
- bne _0800F414
- ldrh r0, [r5]
- movs r1, 0xC
- b _0800F418
- .align 2, 0
-_0800F408: .4byte gBattleTypeFlags
-_0800F40C: .4byte gBlockRecvBuffer
-_0800F410: .4byte 0x00000101
-_0800F414:
- ldrh r0, [r5]
- movs r1, 0x8
-_0800F418:
- orrs r0, r1
- strh r0, [r5]
-_0800F41C:
- bl sub_800EB08
- ldr r0, _0800F474 @ =0x0201d000
- ldr r1, _0800F478 @ =gPlayerParty
- movs r2, 0x96
- lsls r2, 1
- bl memcpy
- ldr r0, _0800F47C @ =sub_800DE30
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0800F480 @ =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, _0800F484 @ =gBlockRecvBuffer
- adds r3, r0, 0x2
- ldr r6, _0800F488 @ =gLinkPlayers
- movs r5, 0x3F
- movs r7, 0x80
- lsls r7, 1
- movs r4, 0x3
-_0800F464:
- ldrh r0, [r6, 0x18]
- cmp r0, 0x1
- beq _0800F49E
- cmp r0, 0x1
- bgt _0800F48C
- cmp r0, 0
- beq _0800F496
- b _0800F4C4
- .align 2, 0
-_0800F474: .4byte 0x0201d000
-_0800F478: .4byte gPlayerParty
-_0800F47C: .4byte sub_800DE30
-_0800F480: .4byte gTasks
-_0800F484: .4byte gBlockRecvBuffer
-_0800F488: .4byte gLinkPlayers
-_0800F48C:
- cmp r0, 0x2
- beq _0800F4A6
- cmp r0, 0x3
- beq _0800F4B6
- b _0800F4C4
-_0800F496:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- b _0800F4AE
-_0800F49E:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- b _0800F4BE
-_0800F4A6:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 6
-_0800F4AE:
- ldrh r0, [r2, 0xE]
- orrs r1, r0
- strh r1, [r2, 0xE]
- b _0800F4C4
-_0800F4B6:
- ldrh r0, [r3]
- adds r1, r5, 0
- ands r1, r0
- lsls r1, 6
-_0800F4BE:
- ldrh r0, [r2, 0x10]
- orrs r1, r0
- strh r1, [r2, 0x10]
-_0800F4C4:
- adds r3, r7
- adds r6, 0x1C
- subs r4, 0x1
- cmp r4, 0
- bge _0800F464
- bl ZeroPlayerPartyMons
- bl ZeroEnemyPartyMons
- ldr r1, _0800F4FC @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0800F4DE:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F4EA
- b _0800F7E0
-_0800F4EA:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800F500 @ =0x0201d000
- movs r2, 0xC8
- bl SendBlock
- b _0800F770
- .align 2, 0
-_0800F4FC: .4byte gUnknown_02024D1E
-_0800F500: .4byte 0x0201d000
-_0800F504:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- beq _0800F512
- b _0800F7E0
-_0800F512:
- bl ResetBlockReceivedFlags
- movs r4, 0
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- mov r8, r0
- ldr r5, _0800F53C @ =gBlockRecvBuffer
- movs r7, 0
-_0800F524:
- cmp r4, r6
- bne _0800F558
- ldr r0, _0800F540 @ =gLinkPlayers
- adds r0, r7, r0
- ldrh r0, [r0, 0x18]
- cmp r0, 0x2
- bgt _0800F544
- cmp r0, 0x1
- bge _0800F550
- cmp r0, 0
- beq _0800F548
- b _0800F5E2
- .align 2, 0
-_0800F53C: .4byte gBlockRecvBuffer
-_0800F540: .4byte gLinkPlayers
-_0800F544:
- cmp r0, 0x3
- bne _0800F5E2
-_0800F548:
- ldr r0, _0800F54C @ =gPlayerParty
- b _0800F5C8
- .align 2, 0
-_0800F54C: .4byte gPlayerParty
-_0800F550:
- ldr r0, _0800F554 @ =gPlayerParty + 3 * 0x64
- b _0800F5C8
- .align 2, 0
-_0800F554: .4byte gPlayerParty + 3 * 0x64
-_0800F558:
- ldr r2, _0800F578 @ =gLinkPlayers
- adds r0, r7, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0800F57C
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F58A
- b _0800F5B0
- .align 2, 0
-_0800F578: .4byte gLinkPlayers
-_0800F57C:
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F5B0
-_0800F58A:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F59C
- cmp r2, 0x1
- bge _0800F5A8
- cmp r2, 0
- beq _0800F5A0
- b _0800F5E2
-_0800F59C:
- cmp r2, 0x3
- bne _0800F5E2
-_0800F5A0:
- ldr r0, _0800F5A4 @ =gPlayerParty
- b _0800F5C8
- .align 2, 0
-_0800F5A4: .4byte gPlayerParty
-_0800F5A8:
- ldr r0, _0800F5AC @ =gPlayerParty + 3 * 0x64
- b _0800F5C8
- .align 2, 0
-_0800F5AC: .4byte gPlayerParty + 3 * 0x64
-_0800F5B0:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F5C2
- cmp r2, 0x1
- bge _0800F5D8
- cmp r2, 0
- beq _0800F5C6
- b _0800F5E2
-_0800F5C2:
- cmp r2, 0x3
- bne _0800F5E2
-_0800F5C6:
- ldr r0, _0800F5D4 @ =gEnemyParty
-_0800F5C8:
- adds r1, r5, 0
- movs r2, 0xC8
- bl memcpy
- b _0800F5E2
- .align 2, 0
-_0800F5D4: .4byte gEnemyParty
-_0800F5D8:
- ldr r0, _0800F5F4 @ =gEnemyParty + 3 * 0x64
- adds r1, r5, 0
- movs r2, 0xC8
- bl memcpy
-_0800F5E2:
- movs r0, 0x80
- lsls r0, 1
- adds r5, r0
- adds r7, 0x1C
- adds r4, 0x1
- cmp r4, 0x3
- ble _0800F524
- b _0800F770
- .align 2, 0
-_0800F5F4: .4byte gEnemyParty + 3 * 0x64
-_0800F5F8:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F604
- b _0800F7E0
-_0800F604:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800F618 @ =0x0201d0c8
- movs r2, 0x64
- bl SendBlock
- b _0800F770
- .align 2, 0
-_0800F618: .4byte 0x0201d0c8
-_0800F61C:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- beq _0800F62A
- b _0800F7E0
-_0800F62A:
- bl ResetBlockReceivedFlags
- movs r4, 0
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- mov r8, r0
- ldr r5, _0800F654 @ =gBlockRecvBuffer
- movs r7, 0
-_0800F63C:
- cmp r4, r6
- bne _0800F670
- ldr r0, _0800F658 @ =gLinkPlayers
- adds r0, r7, r0
- ldrh r0, [r0, 0x18]
- cmp r0, 0x2
- bgt _0800F65C
- cmp r0, 0x1
- bge _0800F668
- cmp r0, 0
- beq _0800F660
- b _0800F6FA
- .align 2, 0
-_0800F654: .4byte gBlockRecvBuffer
-_0800F658: .4byte gLinkPlayers
-_0800F65C:
- cmp r0, 0x3
- bne _0800F6FA
-_0800F660:
- ldr r0, _0800F664 @ =gPlayerParty + 2 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F664: .4byte gPlayerParty + 2 * 0x64
-_0800F668:
- ldr r0, _0800F66C @ =gPlayerParty + 5 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F66C: .4byte gPlayerParty + 5 * 0x64
-_0800F670:
- ldr r2, _0800F690 @ =gLinkPlayers
- adds r0, r7, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0800F694
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F6A2
- b _0800F6C8
- .align 2, 0
-_0800F690: .4byte gLinkPlayers
-_0800F694:
- mov r1, r8
- adds r0, r1, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F6C8
-_0800F6A2:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F6B4
- cmp r2, 0x1
- bge _0800F6C0
- cmp r2, 0
- beq _0800F6B8
- b _0800F6FA
-_0800F6B4:
- cmp r2, 0x3
- bne _0800F6FA
-_0800F6B8:
- ldr r0, _0800F6BC @ =gPlayerParty + 2 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F6BC: .4byte gPlayerParty + 2 * 0x64
-_0800F6C0:
- ldr r0, _0800F6C4 @ =gPlayerParty + 5 * 0x64
- b _0800F6E0
- .align 2, 0
-_0800F6C4: .4byte gPlayerParty + 5 * 0x64
-_0800F6C8:
- adds r0, r7, r2
- ldrh r2, [r0, 0x18]
- cmp r2, 0x2
- bgt _0800F6DA
- cmp r2, 0x1
- bge _0800F6F0
- cmp r2, 0
- beq _0800F6DE
- b _0800F6FA
-_0800F6DA:
- cmp r2, 0x3
- bne _0800F6FA
-_0800F6DE:
- ldr r0, _0800F6EC @ =gEnemyParty + 2 * 0x64
-_0800F6E0:
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- b _0800F6FA
- .align 2, 0
-_0800F6EC: .4byte gEnemyParty + 2 * 0x64
-_0800F6F0:
- ldr r0, _0800F77C @ =gEnemyParty + 5 * 0x64
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
-_0800F6FA:
- movs r0, 0x80
- lsls r0, 1
- adds r5, r0
- adds r7, 0x1C
- adds r4, 0x1
- cmp r4, 0x3
- ble _0800F63C
- ldr r4, _0800F780 @ =gPlayerParty
- adds r0, r4, 0
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0x64
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0xC8
- bl shedinja_something
- movs r1, 0x96
- lsls r1, 1
- adds r0, r4, r1
- bl shedinja_something
- movs r7, 0xC8
- lsls r7, 1
- adds r0, r4, r7
- bl shedinja_something
- movs r1, 0xFA
- lsls r1, 1
- adds r0, r4, r1
- bl shedinja_something
- ldr r4, _0800F784 @ =gEnemyParty
- adds r0, r4, 0
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0x64
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0xC8
- bl shedinja_something
- subs r7, 0x64
- adds r0, r4, r7
- bl shedinja_something
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r4, r1
- bl shedinja_something
- adds r7, 0xC8
- adds r0, r4, r7
- bl shedinja_something
-_0800F770:
- ldr r1, _0800F788 @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0800F7E0
- .align 2, 0
-_0800F77C: .4byte gEnemyParty + 5 * 0x64
-_0800F780: .4byte gPlayerParty
-_0800F784: .4byte gEnemyParty
-_0800F788: .4byte gUnknown_02024D1E
-_0800F78C:
- bl sub_800B950
- ldr r0, _0800F7A0 @ =gUnknown_02024D1E
- ldrb r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strb r1, [r0]
- strb r2, [r0, 0x1]
- strb r2, [r0, 0x2]
- b _0800F7E0
- .align 2, 0
-_0800F7A0: .4byte gUnknown_02024D1E
-_0800F7A4:
- ldr r0, _0800F7EC @ =gUnknown_02024D1F
- adds r1, r0, 0x1
- bl battle_load_something
- lsls r0, 24
- cmp r0, 0
- beq _0800F7E0
- ldr r2, _0800F7F0 @ =gUnknown_030042D0
- ldr r1, _0800F7F4 @ =gMain
- ldr r0, [r1]
- str r0, [r2]
- ldr r0, _0800F7F8 @ =sub_8010824
- str r0, [r1]
- ldr r0, _0800F7FC @ =sub_800F808
- bl SetMainCallback2
- ldr r3, _0800F800 @ =gBattleTypeFlags
- ldrh r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0800F7E0
- ldr r1, _0800F804 @ =gTrainerBattleOpponent
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- strh r0, [r1]
- movs r0, 0x20
- orrs r0, r2
- strh r0, [r3]
-_0800F7E0:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F7EC: .4byte gUnknown_02024D1F
-_0800F7F0: .4byte gUnknown_030042D0
-_0800F7F4: .4byte gMain
-_0800F7F8: .4byte sub_8010824
-_0800F7FC: .4byte sub_800F808
-_0800F800: .4byte gBattleTypeFlags
-_0800F804: .4byte gTrainerBattleOpponent
- thumb_func_end sub_800F298
-
thumb_func_start sub_800F808
sub_800F808: @ 800F808
push {lr}
diff --git a/src/battle_2.c b/src/battle_2.c
index f623b3da2..019d463fd 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -61,6 +61,7 @@ extern u8 ewram[];
#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0))
#define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4))
#define ewram160CB (ewram[0x160CB])
+#define ewram1D000 ((struct Pokemon *)(ewram + 0x1D000))
extern struct UnknownPokemonStruct2 gUnknown_02023A00[];
extern u8 gUnknown_02024D1E[];
@@ -264,15 +265,15 @@ void sub_800EB08(void)
}
else
{
- s32 r8;
+ s32 numPlayers;
struct BattleEnigmaBerry *src;
u8 r4;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- r8 = 4;
+ numPlayers = 4;
else
- r8 = 2;
- for (i = 0; i < r8; i++)
+ numPlayers = 2;
+ for (i = 0; i < numPlayers; i++)
{
src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
r4 = gLinkPlayers[i].lp_field_18;
@@ -338,20 +339,20 @@ void sub_800EC9C(void)
case 1:
if ((GetBlockReceivedStatus() & 3) == 3)
{
- s32 r3;
+ s32 id;
u8 taskId;
ResetBlockReceivedFlags();
- r3 = 0;
+ id = 0;
if (gBlockRecvBuffer[0][0] == 0x100)
{
if (playerId == 0)
gBattleTypeFlags |= 12;
else
gBattleTypeFlags |= 8;
- r3++;
+ id++;
}
- if (r3 == 0)
+ if (id == 0)
{
if (gBlockRecvBuffer[0][0] == gBlockRecvBuffer[1][0])
{
@@ -359,17 +360,17 @@ void sub_800EC9C(void)
gBattleTypeFlags |= 12;
else
gBattleTypeFlags |= 8;
- r3++;
+ id++;
}
- if (r3 == 0)
+ if (id == 0)
{
- while (r3 < 2)
+ while (id < 2)
{
- if (gBlockRecvBuffer[r3][0] > 0x0101 && r3 != playerId)
+ if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId)
break;
- r3++;
+ id++;
}
- if (r3 == 2)
+ if (id == 2)
gBattleTypeFlags |= 12;
else
gBattleTypeFlags |= 8;
@@ -547,3 +548,271 @@ void sub_800F104(void)
break;
}
}
+
+void sub_800F298(void)
+{
+ u8 playerId;
+ s32 id;
+
+ playerId = GetMultiplayerId();
+ ewram160CB = playerId;
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ switch (gUnknown_02024D1E[0])
+ {
+ case 0:
+ if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
+ {
+ ewram0.unk0 = 1;
+ ewram0.unk1 = 1;
+ sub_800E9EC();
+ sub_800EAAC();
+ SendBlock(bitmask_all_link_players_but_self(), ewram, 0x20);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 1:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ u8 taskId;
+
+ ResetBlockReceivedFlags();
+ id = 0;
+ if (gBlockRecvBuffer[0][0] == 0x100)
+ {
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ id++;
+ }
+ if (id == 0)
+ {
+ s32 i;
+
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
+ {
+ if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0])
+ break;
+ }
+ if (i == MAX_LINK_PLAYERS)
+ {
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ id++;
+ }
+ if (id == 0)
+ {
+ while (id < MAX_LINK_PLAYERS)
+ {
+ if (gBlockRecvBuffer[id][0] == 0x0101 && id != playerId)
+ if (id < playerId)
+ break;
+ if (gBlockRecvBuffer[id][0] > 0x0101 && id != playerId)
+ break;
+ id++;
+ }
+ if (id == MAX_LINK_PLAYERS)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ }
+ }
+ sub_800EB08();
+ memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3);
+ taskId = CreateTask(sub_800DE30, 0);
+ gTasks[taskId].data[1] = 0x10E;
+ gTasks[taskId].data[2] = 0x5A;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[4] = 0;
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ gTasks[taskId].data[3] |= gBlockRecvBuffer[id][1] & 0x3F;
+ break;
+ case 1:
+ gTasks[taskId].data[4] |= gBlockRecvBuffer[id][1] & 0x3F;
+ break;
+ case 2:
+ gTasks[taskId].data[3] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6;
+ break;
+ case 3:
+ gTasks[taskId].data[4] |= (gBlockRecvBuffer[id][1] & 0x3F) << 6;
+ break;
+ }
+ }
+ ZeroPlayerPartyMons();
+ ZeroEnemyPartyMons();
+ gUnknown_02024D1E[0]++;
+ goto step_2;
+ }
+ break;
+ case 2:
+ step_2:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 3:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ ResetBlockReceivedFlags();
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ {
+ if (id == playerId)
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ }
+ }
+ else
+ {
+ if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1))
+ || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1)))
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ }
+ }
+ else
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gEnemyParty, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ case 1:
+ case 2:
+ memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ break;
+ }
+ }
+ }
+ }
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 4:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon));
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 5:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ ResetBlockReceivedFlags();
+ for (id = 0; id < MAX_LINK_PLAYERS; id++)
+ {
+ if (id == playerId)
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ }
+ }
+ else
+ {
+ if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1))
+ || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1)))
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gPlayerParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ case 1:
+ case 2:
+ memcpy(gPlayerParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ }
+ }
+ else
+ {
+ switch (gLinkPlayers[id].lp_field_18)
+ {
+ case 0:
+ case 3:
+ memcpy(gEnemyParty + 2, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ case 1:
+ case 2:
+ memcpy(gEnemyParty + 5, gBlockRecvBuffer[id], sizeof(struct Pokemon));
+ break;
+ }
+ }
+ }
+ }
+
+ shedinja_something(&gPlayerParty[0]);
+ shedinja_something(&gPlayerParty[1]);
+ shedinja_something(&gPlayerParty[2]);
+ shedinja_something(&gPlayerParty[3]);
+ shedinja_something(&gPlayerParty[4]);
+ shedinja_something(&gPlayerParty[5]);
+
+ shedinja_something(&gEnemyParty[0]);
+ shedinja_something(&gEnemyParty[1]);
+ shedinja_something(&gEnemyParty[2]);
+ shedinja_something(&gEnemyParty[3]);
+ shedinja_something(&gEnemyParty[4]);
+ shedinja_something(&gEnemyParty[5]);
+
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 6:
+ sub_800B950();
+ gUnknown_02024D1E[0]++;
+ gUnknown_02024D1E[1] = 0;
+ gUnknown_02024D1E[2] = 0;
+ break;
+ case 7:
+ if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0)
+ {
+ gUnknown_030042D0 = gMain.callback1;
+ gMain.callback1 = sub_8010824;
+ SetMainCallback2(sub_800F808);
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gTrainerBattleOpponent = 0x800;
+ gBattleTypeFlags |= BATTLE_TYPE_20;
+ }
+ }
+ break;
+ }
+}