summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-05-10 16:47:08 -0500
committercamthesaxman <cameronghall@cox.net>2017-05-10 16:47:08 -0500
commite78f49f1efc2eadb674d00c00ffc9a4018b3cdbd (patch)
tree33f20a7130abba363f8e09d93f0879d78353de2b
parentb2218c7d2ba5a2a2b9ff1258dfb454479241c3b6 (diff)
decompile some more
-rw-r--r--asm/battle_2.s701
-rw-r--r--src/battle_2.c321
2 files changed, 270 insertions, 752 deletions
diff --git a/asm/battle_2.s b/asm/battle_2.s
index 322c1f9a1..300c53114 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -6,707 +6,6 @@
.text
- thumb_func_start sub_800EC9C
-sub_800EC9C: @ 800EC9C
- push {r4-r7,lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0800ECD4 @ =0x02000000
- ldr r1, _0800ECD8 @ =0x000160cb
- adds r0, r1
- strb r4, [r0]
- movs r0, 0x1
- adds r5, r4, 0
- eors r5, r0
- ldr r0, _0800ECDC @ =gUnknown_02024D1E
- ldrb r0, [r0]
- cmp r0, 0x9
- bls _0800ECCA
- b _0800F008
-_0800ECCA:
- lsls r0, 2
- ldr r1, _0800ECE0 @ =_0800ECE4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800ECD4: .4byte 0x02000000
-_0800ECD8: .4byte 0x000160cb
-_0800ECDC: .4byte gUnknown_02024D1E
-_0800ECE0: .4byte _0800ECE4
- .align 2, 0
-_0800ECE4:
- .4byte _0800ED0C
- .4byte _0800ED7C
- .4byte _0800EE88
- .4byte _0800EEAC
- .4byte _0800EED8
- .4byte _0800EEFC
- .4byte _0800EF28
- .4byte _0800EF48
- .4byte _0800EFB4
- .4byte _0800EFCC
-_0800ED0C:
- ldr r2, _0800ED54 @ =gBattleTypeFlags
- ldrh r1, [r2]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800ED64
- ldr r0, _0800ED58 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800ED22
- b _0800F008
-_0800ED22:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800ED2E
- b _0800F008
-_0800ED2E:
- ldr r4, _0800ED5C @ =0x02000000
- movs r5, 0x1
- strb r5, [r4]
- strb r5, [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
- ldr r0, _0800ED60 @ =gUnknown_02024D1E
- strb r5, [r0]
- b _0800F008
- .align 2, 0
-_0800ED54: .4byte gBattleTypeFlags
-_0800ED58: .4byte gReceivedRemoteLinkPlayers
-_0800ED5C: .4byte 0x02000000
-_0800ED60: .4byte gUnknown_02024D1E
-_0800ED64:
- movs r0, 0x4
- orrs r0, r1
- strh r0, [r2]
- ldr r1, _0800ED78 @ =gUnknown_02024D1E
- movs r0, 0x8
- strb r0, [r1]
- bl sub_800EB08
- b _0800F008
- .align 2, 0
-_0800ED78: .4byte gUnknown_02024D1E
-_0800ED7C:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- beq _0800ED8A
- b _0800F008
-_0800ED8A:
- bl ResetBlockReceivedFlags
- movs r3, 0
- ldr r0, _0800EDA8 @ =gBlockRecvBuffer
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- cmp r1, r0
- bne _0800EDBC
- cmp r4, 0
- bne _0800EDB0
- ldr r0, _0800EDAC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800EDB6
- .align 2, 0
-_0800EDA8: .4byte gBlockRecvBuffer
-_0800EDAC: .4byte gBattleTypeFlags
-_0800EDB0:
- ldr r0, _0800EDE0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800EDB6:
- orrs r1, r2
- strh r1, [r0]
- adds r3, 0x1
-_0800EDBC:
- lsls r7, r5, 8
- cmp r3, 0
- bne _0800EE38
- ldr r0, _0800EDE4 @ =gBlockRecvBuffer
- movs r1, 0x80
- lsls r1, 1
- adds r2, r0, r1
- ldrh r1, [r0]
- adds r6, r0, 0
- ldrh r2, [r2]
- cmp r1, r2
- bne _0800EDF4
- cmp r4, 0
- bne _0800EDE8
- ldr r0, _0800EDE0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0xC
- b _0800EDEE
- .align 2, 0
-_0800EDE0: .4byte gBattleTypeFlags
-_0800EDE4: .4byte gBlockRecvBuffer
-_0800EDE8:
- ldr r0, _0800EE04 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r2, 0x8
-_0800EDEE:
- orrs r1, r2
- strh r1, [r0]
- adds r3, 0x1
-_0800EDF4:
- lsls r7, r5, 8
- cmp r3, 0
- bne _0800EE38
- ldrh r1, [r6]
- ldr r0, _0800EE08 @ =0x00000101
- ldr r2, _0800EE04 @ =gBattleTypeFlags
- b _0800EE1A
- .align 2, 0
-_0800EE04: .4byte gBattleTypeFlags
-_0800EE08: .4byte 0x00000101
-_0800EE0C:
- adds r3, 0x1
- cmp r3, 0x1
- bgt _0800EE22
- lsls r0, r3, 8
- adds r0, r6
- ldrh r1, [r0]
- ldr r0, _0800EE2C @ =0x00000101
-_0800EE1A:
- cmp r1, r0
- bls _0800EE0C
- cmp r3, r4
- beq _0800EE0C
-_0800EE22:
- cmp r3, 0x2
- bne _0800EE30
- ldrh r0, [r2]
- movs r1, 0xC
- b _0800EE34
- .align 2, 0
-_0800EE2C: .4byte 0x00000101
-_0800EE30:
- ldrh r0, [r2]
- movs r1, 0x8
-_0800EE34:
- orrs r0, r1
- strh r0, [r2]
-_0800EE38:
- bl sub_800EB08
- ldr r0, _0800EE78 @ =sub_800DE30
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EE7C @ =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, _0800EE80 @ =0x02000000
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- lsls r0, 8
- orrs r1, r0
- strh r1, [r2, 0xE]
- ldr r0, _0800EE84 @ =gBlockRecvBuffer
- adds r0, 0x2
- adds r0, r7, r0
- ldrh r0, [r0]
- strh r0, [r2, 0x10]
- b _0800EF96
- .align 2, 0
-_0800EE78: .4byte sub_800DE30
-_0800EE7C: .4byte gTasks
-_0800EE80: .4byte 0x02000000
-_0800EE84: .4byte gBlockRecvBuffer
-_0800EE88:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800EE94
- b _0800F008
-_0800EE94:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EEA8 @ =gPlayerParty
- movs r2, 0xC8
- bl SendBlock
- b _0800EF96
- .align 2, 0
-_0800EEA8: .4byte gPlayerParty
-_0800EEAC:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- beq _0800EEBA
- b _0800F008
-_0800EEBA:
- bl ResetBlockReceivedFlags
- ldr r0, _0800EED0 @ =gEnemyParty
- lsls r1, r5, 8
- ldr r2, _0800EED4 @ =gBlockRecvBuffer
- adds r1, r2
- movs r2, 0xC8
- bl memcpy
- b _0800EF96
- .align 2, 0
-_0800EED0: .4byte gEnemyParty
-_0800EED4: .4byte gBlockRecvBuffer
-_0800EED8:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800EEE4
- b _0800F008
-_0800EEE4:
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EEF8 @ =gPlayerParty + 2 * 0x64
- movs r2, 0xC8
- bl SendBlock
- b _0800EF96
- .align 2, 0
-_0800EEF8: .4byte gPlayerParty + 2 * 0x64
-_0800EEFC:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- beq _0800EF0A
- b _0800F008
-_0800EF0A:
- bl ResetBlockReceivedFlags
- ldr r0, _0800EF20 @ =gEnemyParty + 2 * 0x64
- lsls r1, r5, 8
- ldr r2, _0800EF24 @ =gBlockRecvBuffer
- adds r1, r2
- movs r2, 0xC8
- bl memcpy
- b _0800EF96
- .align 2, 0
-_0800EF20: .4byte gEnemyParty + 2 * 0x64
-_0800EF24: .4byte gBlockRecvBuffer
-_0800EF28:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- beq _0800F008
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0800EF44 @ =gPlayerParty + 4 * 0x64
- movs r2, 0xC8
- bl SendBlock
- b _0800EF96
- .align 2, 0
-_0800EF44: .4byte gPlayerParty + 4 * 0x64
-_0800EF48:
- bl GetBlockReceivedStatus
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x3
- bne _0800F008
- bl ResetBlockReceivedFlags
- ldr r4, _0800EFA0 @ =gEnemyParty + 4 * 0x64
- lsls r1, r5, 8
- ldr r0, _0800EFA4 @ =gBlockRecvBuffer
- adds r1, r0
- adds r0, r4, 0
- movs r2, 0xC8
- bl memcpy
- ldr r1, _0800EFA8 @ =0xfffffe70
- adds r0, r4, r1
- bl shedinja_something
- ldr r1, _0800EFAC @ =0xfffffed4
- adds r0, r4, r1
- bl shedinja_something
- adds r0, r4, 0
- subs r0, 0xC8
- bl shedinja_something
- adds r0, r4, 0
- subs r0, 0x64
- bl shedinja_something
- adds r0, r4, 0
- bl shedinja_something
- adds r0, r4, 0
- adds r0, 0x64
- bl shedinja_something
-_0800EF96:
- ldr r1, _0800EFB0 @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0800F008
- .align 2, 0
-_0800EFA0: .4byte gEnemyParty + 4 * 0x64
-_0800EFA4: .4byte gBlockRecvBuffer
-_0800EFA8: .4byte 0xfffffe70
-_0800EFAC: .4byte 0xfffffed4
-_0800EFB0: .4byte gUnknown_02024D1E
-_0800EFB4:
- bl sub_800B950
- ldr r0, _0800EFC8 @ =gUnknown_02024D1E
- ldrb r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strb r1, [r0]
- strb r2, [r0, 0x1]
- strb r2, [r0, 0x2]
- b _0800F008
- .align 2, 0
-_0800EFC8: .4byte gUnknown_02024D1E
-_0800EFCC:
- ldr r0, _0800F010 @ =gUnknown_02024D1F
- adds r1, r0, 0x1
- bl battle_load_something
- lsls r0, 24
- cmp r0, 0
- beq _0800F008
- ldr r2, _0800F014 @ =gUnknown_030042D0
- ldr r1, _0800F018 @ =gMain
- ldr r0, [r1]
- str r0, [r2]
- ldr r0, _0800F01C @ =sub_8010824
- str r0, [r1]
- ldr r0, _0800F020 @ =sub_800F808
- bl SetMainCallback2
- ldr r3, _0800F024 @ =gBattleTypeFlags
- ldrh r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0800F008
- ldr r1, _0800F028 @ =gTrainerBattleOpponent
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- strh r0, [r1]
- movs r0, 0x20
- orrs r0, r2
- strh r0, [r3]
-_0800F008:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F010: .4byte gUnknown_02024D1F
-_0800F014: .4byte gUnknown_030042D0
-_0800F018: .4byte gMain
-_0800F01C: .4byte sub_8010824
-_0800F020: .4byte sub_800F808
-_0800F024: .4byte gBattleTypeFlags
-_0800F028: .4byte gTrainerBattleOpponent
- thumb_func_end sub_800EC9C
-
- thumb_func_start sub_800F02C
-sub_800F02C: @ 800F02C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r8, r0
- ldr r7, _0800F0F8 @ =gUnknown_02023A04
- mov r10, r7
-_0800F03E:
- mov r1, r8
- lsls r6, r1, 5
- movs r0, 0x64
- mov r4, r8
- muls r4, r0
- ldr r0, _0800F0FC @ =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- movs r1, 0x4
- negs r1, r1
- add r1, r10
- mov r9, r1
- adds r5, r6, r1
- strh r0, [r5]
- adds r0, r4, 0
- movs r1, 0xC
- bl GetMonData
- strh r0, [r5, 0x2]
- adds r0, r4, 0
- movs r1, 0x2
- adds r2, r7, 0
- bl GetMonData
- adds r0, r4, 0
- movs r1, 0x38
- bl GetMonData
- strb r0, [r5, 0xF]
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- strh r0, [r5, 0x10]
- adds r0, r4, 0
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r5, 0x12]
- adds r0, r4, 0
- movs r1, 0x37
- bl GetMonData
- mov r1, r10
- adds r1, 0x10
- adds r6, r1
- str r0, [r6]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [r7, 0x14]
- adds r0, r4, 0
- bl GetMonGender
- strb r0, [r5, 0x1C]
- adds r0, r7, 0
- bl StripExtCtrlCodes
- adds r0, r4, 0
- movs r1, 0x3
- bl GetMonData
- strb r0, [r5, 0x1D]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0800F0D4
- adds r0, r7, 0
- movs r1, 0
- bl PadNameString
-_0800F0D4:
- adds r7, 0x20
- movs r0, 0x1
- add r8, r0
- mov r1, r8
- cmp r1, 0x2
- ble _0800F03E
- ldr r0, _0800F100 @ =0x02000000
- mov r1, r9
- 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
-_0800F0F8: .4byte gUnknown_02023A04
-_0800F0FC: .4byte gPlayerParty
-_0800F100: .4byte 0x02000000
- thumb_func_end sub_800F02C
-
- thumb_func_start sub_800F104
-sub_800F104: @ 800F104
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r4, _0800F148 @ =0x02000000
- ldr r1, _0800F14C @ =0x000160cb
- adds r0, r4, r1
- strb r6, [r0]
- ldr r2, _0800F150 @ =0x000160c4
- adds r2, r4
- mov r9, r2
- ldr r0, _0800F154 @ =0x000160c2
- adds r0, r4
- mov r8, r0
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- ldr r5, _0800F158 @ =gUnknown_02024D1E
- ldrb r0, [r5]
- cmp r0, 0x1
- beq _0800F1A0
- cmp r0, 0x1
- bgt _0800F15C
- cmp r0, 0
- beq _0800F168
- b _0800F27A
- .align 2, 0
-_0800F148: .4byte 0x02000000
-_0800F14C: .4byte 0x000160cb
-_0800F150: .4byte 0x000160c4
-_0800F154: .4byte 0x000160c2
-_0800F158: .4byte gUnknown_02024D1E
-_0800F15C:
- cmp r0, 0x2
- beq _0800F240
- cmp r0, 0x3
- bne _0800F166
- b _0800F25C
-_0800F166:
- b _0800F27A
-_0800F168:
- ldr r0, _0800F19C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800F172
- b _0800F27A
-_0800F172:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- bne _0800F17E
- b _0800F27A
-_0800F17E:
- bl sub_800F02C
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0x60
- bl SendBlock
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _0800F27A
- .align 2, 0
-_0800F19C: .4byte gReceivedRemoteLinkPlayers
-_0800F1A0:
- bl GetBlockReceivedStatus
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0xF
- bne _0800F27A
- bl ResetBlockReceivedFlags
- movs r4, 0
- lsls r0, r6, 3
- subs r0, r6
- lsls r5, r0, 2
- movs r7, 0
-_0800F1BA:
- cmp r4, r6
- beq _0800F1FA
- ldr r2, _0800F1DC @ =gLinkPlayers
- adds r0, r7, r2
- ldrh r1, [r0, 0x18]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0800F1E0
- adds r0, r5, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F1EC
- b _0800F1FA
- .align 2, 0
-_0800F1DC: .4byte gLinkPlayers
-_0800F1E0:
- adds r0, r5, r2
- ldrh r1, [r0, 0x18]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0800F1FA
-_0800F1EC:
- lsls r1, r4, 8
- ldr r0, _0800F228 @ =gBlockRecvBuffer
- adds r1, r0
- ldr r0, _0800F22C @ =gUnknown_02023A00
- movs r2, 0x60
- bl memcpy
-_0800F1FA:
- adds r7, 0x1C
- adds r4, 0x1
- cmp r4, 0x3
- ble _0800F1BA
- ldr r1, _0800F230 @ =gUnknown_02024D1E
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r1, _0800F234 @ =gMain
- ldr r0, [r1, 0x8]
- mov r2, r9
- str r0, [r2]
- ldr r0, _0800F238 @ =gBattleTypeFlags
- ldrh r0, [r0]
- mov r2, r8
- strh r0, [r2]
- ldr r0, _0800F23C @ =sub_800F104
- str r0, [r1, 0x8]
- movs r0, 0x5
- movs r1, 0
- bl OpenPartyMenu
- b _0800F27A
- .align 2, 0
-_0800F228: .4byte gBlockRecvBuffer
-_0800F22C: .4byte gUnknown_02023A00
-_0800F230: .4byte gUnknown_02024D1E
-_0800F234: .4byte gMain
-_0800F238: .4byte gBattleTypeFlags
-_0800F23C: .4byte sub_800F104
-_0800F240:
- ldr r0, _0800F258 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0800F27A
- movs r0, 0x3
- strb r0, [r5]
- bl sub_800832C
- b _0800F27A
- .align 2, 0
-_0800F258: .4byte gPaletteFade
-_0800F25C:
- ldr r0, _0800F288 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0800F27A
- ldr r1, _0800F28C @ =gBattleTypeFlags
- mov r2, r8
- ldrh r0, [r2]
- strh r0, [r1]
- ldr r1, _0800F290 @ =gMain
- mov r2, r9
- ldr r0, [r2]
- str r0, [r1, 0x8]
- ldr r0, _0800F294 @ =sub_800E7F8
- bl SetMainCallback2
-_0800F27A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800F288: .4byte gReceivedRemoteLinkPlayers
-_0800F28C: .4byte gBattleTypeFlags
-_0800F290: .4byte gMain
-_0800F294: .4byte sub_800E7F8
- thumb_func_end sub_800F104
-
thumb_func_start sub_800F298
sub_800F298: @ 800F298
push {r4-r7,lr}
diff --git a/src/battle_2.c b/src/battle_2.c
index d15e10f2f..17de219ce 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -8,6 +8,7 @@
#include "pokemon.h"
#include "species.h"
#include "link.h"
+#include "name_string_util.h"
struct UnknownStruct5
{
@@ -39,13 +40,31 @@ struct UnknownStruct8
u8 unk1A;
};
+struct UnknownPokemonStruct2
+{
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 heldItem;
+ /*0x04*/ u8 nickname[11];
+ /*0x0F*/ u8 level;
+ /*0x10*/ u16 hp;
+ /*0x12*/ u16 maxhp;
+ /*0x14*/ u32 status;
+ /*0x18*/ u32 personality;
+ /*0x1C*/ u8 gender;
+ /*0x1D*/ u8 language;
+};
+
extern const struct UnknownStruct5 gUnknown_081F9674;
extern const u8 gUnknown_081F96C8[];
extern u8 ewram[];
#define ewram0 (*(struct UnknownStruct7 *)(ewram + 0x0))
#define ewram4 (*(struct UnknownStruct8 *)(ewram + 0x4))
-extern u8 gUnknown_02024D1E;
+#define ewram160CB (ewram[0x160CB])
+
+extern struct UnknownPokemonStruct2 gUnknown_02023A00[];
+extern u8 gUnknown_02024D1E[];
+extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is.
extern u16 gUnknown_030041B0;
extern u16 gUnknown_030041B4;
extern u16 gUnknown_030041B8;
@@ -59,8 +78,9 @@ extern u16 gUnknown_030042A0;
extern u16 gUnknown_030042A4;
extern u16 gUnknown_030042C0;
extern u16 gUnknown_030042C4;
+extern MainCallback gUnknown_030042D0;
extern struct UnknownStruct6 gUnknown_03004DE0;
-//extern u16 gUnknown_03004DE0[][0xA0];
+//extern u16 gUnknown_03004DE0[][0xA0]; // possibly?
extern u16 gBattleTypeFlags;
extern u8 gBattleTerrain;
extern u8 gReservedSpritePaletteCount;
@@ -78,14 +98,19 @@ extern void sub_800E23C();
extern void setup_poochyena_battle();
extern void SetWildMonHeldItem(void);
extern void AdjustFriendship(struct Pokemon *, u8);
-
+extern void sub_800DE30(u8);
+extern void sub_800B950(void);
+extern u8 battle_load_something();
+extern void OpenPartyMenu();
void sub_800E7F8(void);
void sub_800EC9C(void);
void sub_800F104(void);
void sub_800F298(void);
+void sub_800F808(void);
void sub_800F8E8();
void sub_800FCFC(void);
+void sub_8010824(void);
void sub_800E7C4(void)
{
@@ -93,7 +118,7 @@ void sub_800E7C4(void)
{
sub_800B858();
SetMainCallback2(sub_800F104);
- gUnknown_02024D1E = 0;
+ gUnknown_02024D1E[0] = 0;
}
else
{
@@ -104,7 +129,7 @@ void sub_800E7C4(void)
void sub_800E7F8(void)
{
s32 i;
-
+
SetHBlankCallback(NULL);
SetVBlankCallback(NULL);
@@ -118,7 +143,7 @@ void sub_800E7F8(void)
gUnknown_030042C4 = 0xF0;
gUnknown_03004240 = 0x5051;
dp12_8087EA4();
-
+
for (i = 0; i < 80; i++)
{
gUnknown_03004DE0.unk0[i] = 0xF0;
@@ -128,7 +153,7 @@ void sub_800E7F8(void)
{
asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter
gUnknown_03004DE0.unk0[i] = 0xFF10;
- gUnknown_03004DE0.unk780[i] = 0xFF10;
+ gUnknown_03004DE0.unk780[i] = 0xFF10;
}
sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8);
SetUpWindowConfig(&gWindowConfig_81E6C58);
@@ -166,7 +191,7 @@ void sub_800E7F8(void)
gMain.inBattle = TRUE;
for (i = 0; i < 6; i++)
AdjustFriendship(&gPlayerParty[i], 3);
- gUnknown_02024D1E = 0;
+ gUnknown_02024D1E[0] = 0;
}
void sub_800E9EC(void)
@@ -176,23 +201,23 @@ void sub_800E9EC(void)
u16 hp;
u32 status;
s32 i;
-
+
for (i = 0; i < 6; i++)
{
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
-
+
if (species == 0)
continue;
if (species != SPECIES_EGG && hp != 0 && status == 0)
r6 |= 1 << i * 2;
-
+
if (species == 0)
continue;
if (hp != 0 && (species == SPECIES_EGG || status != 0))
r6 |= 2 << i * 2;
-
+
if (species == 0)
continue;
if (species != SPECIES_EGG && hp == 0)
@@ -206,7 +231,7 @@ void sub_800EAAC(void)
{
s32 i;
struct UnknownStruct8 *_ewram4 = &ewram4;
-
+
for (i = 0; i < 7; i++)
_ewram4->unk0[i] = gSaveBlock1.enigmaBerry.berry.name[i];
for (i = 0; i < 18; i++)
@@ -219,7 +244,7 @@ void sub_800EB08(void)
{
s32 i;
s32 j;
-
+
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
for (i = 0; i < 7; i++)
@@ -242,7 +267,7 @@ void sub_800EB08(void)
s32 r8;
struct BattleEnigmaBerry *src;
u8 r4;
-
+
if (gBattleTypeFlags & BATTLE_TYPE_40)
r8 = 4;
else
@@ -251,7 +276,7 @@ void sub_800EB08(void)
{
src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
r4 = gLinkPlayers[i].lp_field_18;
-
+
for (j = 0; j < 7; j++)
gEnigmaBerries[r4].name[j] = src->name[j];
for (j = 0; j < 18; j++)
@@ -266,7 +291,7 @@ void shedinja_something(struct Pokemon *pkmn)
{
u8 nickname[POKEMON_NAME_LENGTH + 1];
u8 language = 1;
-
+
if (GetMonData(pkmn, MON_DATA_SPECIES) == SPECIES_SHEDINJA
&& GetMonData(pkmn, MON_DATA_LANGUAGE) != language)
{
@@ -278,53 +303,247 @@ void shedinja_something(struct Pokemon *pkmn)
void sub_800EC9C(void)
{
- u8 r4;
- u8 r5;
-
+ u8 playerId;
+ u8 enemyId;
+
RunTasks();
AnimateSprites();
BuildOamBuffer();
- r4 = GetMultiplayerId();
- ewram[0x160CB] = r4;
- r5 = r4 ^ 1;
- switch (gUnknown_02024D1E)
+ playerId = GetMultiplayerId();
+ ewram160CB = playerId;
+ enemyId = playerId ^ 1;
+
+ switch (gUnknown_02024D1E[0])
{
- case 0:
- //_0800ED0C
- if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ case 0:
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
{
- if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
- {
- ewram0.unk0 = 1;
- ewram0.unk1 = 1;
- sub_800E9EC();
- sub_800EAAC();
- SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32);
- gUnknown_02024D1E = 1;
- }
+ ewram0.unk0 = 1;
+ ewram0.unk1 = 1;
+ sub_800E9EC();
+ sub_800EAAC();
+ SendBlock(bitmask_all_link_players_but_self(), &ewram0, 32);
+ gUnknown_02024D1E[0] = 1;
}
- //_0800ED64
- else
+ }
+ else
+ {
+ gBattleTypeFlags |= BATTLE_TYPE_WILD;
+ gUnknown_02024D1E[0] = 8;
+ sub_800EB08();
+ }
+ break;
+ case 1:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ s32 r3;
+ u8 taskId;
+
+ ResetBlockReceivedFlags();
+ r3 = 0;
+ if (gBlockRecvBuffer[0][0] == 0x100)
{
- gBattleTypeFlags |= BATTLE_TYPE_WILD;
- gUnknown_02024D1E = 8;
- sub_800EB08();
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ r3++;
}
- break;
- case 1:
- //_0800ED7C
- if ((GetBlockReceivedStatus() & 3) == 3)
+ if (r3 == 0)
{
- ResetBlockReceivedFlags();
- if (gBlockRecvBuffer[0][0] == 0x100)
+ if (gBlockRecvBuffer[0][0] == gBlockRecvBuffer[1][0])
{
- if (r4 == 0)
+ if (playerId == 0)
+ gBattleTypeFlags |= 12;
+ else
+ gBattleTypeFlags |= 8;
+ r3++;
+ }
+ if (r3 == 0)
+ {
+ while (r3 < 2)
+ {
+ if (gBlockRecvBuffer[r3][0] > 0x0101 && r3 != playerId)
+ break;
+ r3++;
+ }
+ if (r3 == 2)
gBattleTypeFlags |= 12;
else
gBattleTypeFlags |= 8;
}
- //_0800EDBC
}
- break;
+ sub_800EB08();
+ taskId = CreateTask(sub_800DE30, 0);
+ gTasks[taskId].data[1] = 0x10E;
+ gTasks[taskId].data[2] = 0x5A;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[3] = ewram0.unk2 | (ewram0.unk3 << 8);
+ gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1];
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 2:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(*gPlayerParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 3:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ ResetBlockReceivedFlags();
+ memcpy(gEnemyParty, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 4:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(*gPlayerParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 5:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ ResetBlockReceivedFlags();
+ memcpy(gEnemyParty + 2, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 6:
+ if (sub_8007ECC())
+ {
+ SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(*gPlayerParty) * 2);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 7:
+ if ((GetBlockReceivedStatus() & 3) == 3)
+ {
+ ResetBlockReceivedFlags();
+ memcpy(gEnemyParty + 4, gBlockRecvBuffer[enemyId], sizeof(*gEnemyParty) * 2);
+ 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 8:
+ sub_800B950();
+ gUnknown_02024D1E[0]++;
+ gUnknown_02024D1E[1] = 0;
+ gUnknown_02024D1E[2] = 0;
+ break;
+ case 9:
+ 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;
}
-} \ No newline at end of file
+}
+
+void sub_800F02C(void)
+{
+ s32 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ u8 *nickname = gUnknown_02023A00[i].nickname;
+
+ gUnknown_02023A00[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES);
+ gUnknown_02023A00[i].heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nickname);
+ gUnknown_02023A00[i].level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+ gUnknown_02023A00[i].hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ gUnknown_02023A00[i].maxhp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ gUnknown_02023A00[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
+ gUnknown_02023A00[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
+ gUnknown_02023A00[i].gender = GetMonGender(&gPlayerParty[i]);
+ StripExtCtrlCodes(nickname);
+ gUnknown_02023A00[i].language = GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE);
+ if (gUnknown_02023A00[i].language != 1)
+ PadNameString(nickname, 0);
+ }
+ memcpy(ewram, gUnknown_02023A00, 0x60);
+}
+
+void sub_800F104(void)
+{
+ u8 playerId;
+ MainCallback *pSavedCallback;
+ u16 *pSavedBattleTypeFlags;
+
+ playerId = GetMultiplayerId();
+ ewram160CB = playerId;
+ // Seriously, Game Freak?
+ pSavedCallback = (MainCallback *)(ewram + 0x160C4);
+ pSavedBattleTypeFlags = (u16 *)(ewram + 0x160C2);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+
+ switch (gUnknown_02024D1E[0])
+ {
+ case 0:
+ if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC())
+ {
+ sub_800F02C();
+ SendBlock(bitmask_all_link_players_but_self(), ewram, 0x60);
+ gUnknown_02024D1E[0]++;
+ }
+ break;
+ case 1:
+ if ((GetBlockReceivedStatus() & 0xF) == 0xF)
+ {
+ s32 i;
+
+ ResetBlockReceivedFlags();
+ for (i = 0; i < 4; i++)
+ {
+ if (i != playerId)
+ {
+ if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1))
+ || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1)))
+ memcpy(gUnknown_02023A00, gBlockRecvBuffer[i], 0x60);
+ }
+ }
+ gUnknown_02024D1E[0]++;
+ *pSavedCallback = gMain.savedCallback;
+ *pSavedBattleTypeFlags = gBattleTypeFlags;
+ gMain.savedCallback = sub_800F104;
+ OpenPartyMenu(5, 0);
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_02024D1E[0] = 3;
+ sub_800832C();
+ }
+ break;
+ case 3:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gBattleTypeFlags = *pSavedBattleTypeFlags;
+ gMain.savedCallback = *pSavedCallback;
+ SetMainCallback2(sub_800E7F8);
+ }
+ break;
+ }
+}