summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom3.s900
-rw-r--r--src/rom3.c333
2 files changed, 326 insertions, 907 deletions
diff --git a/asm/rom3.s b/asm/rom3.s
index 1717e3688..9ab9f021e 100644
--- a/asm/rom3.s
+++ b/asm/rom3.s
@@ -6,906 +6,6 @@
.text
- thumb_func_start sub_800BD54
-sub_800BD54: @ 800BD54
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0800BD74 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0800BD6C
- b _0800BE88
-_0800BD6C:
- movs r0, 0
- mov r8, r0
- b _0800BE7E
- .align 2, 0
-_0800BD74: .4byte gBattleTypeFlags
-_0800BD78:
- movs r5, 0
- movs r0, 0x1
- add r0, r8
- mov r10, r0
- ldr r0, _0800BDA4 @ =gUnknown_02024A72
- add r0, r8
- mov r9, r0
- mov r0, r8
- lsls r6, r0, 1
- movs r7, 0
-_0800BD8C:
- mov r0, r8
- cmp r0, 0x1
- bgt _0800BDF4
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0800BDAC
- ldr r0, _0800BDA8 @ =gPlayerParty
- b _0800BDAE
- .align 2, 0
-_0800BDA4: .4byte gUnknown_02024A72
-_0800BDA8: .4byte gPlayerParty
-_0800BDAC:
- ldr r0, _0800BDEC @ =gEnemyParty
-_0800BDAE:
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0800BE74
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- cmp r0, 0
- beq _0800BE74
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0800BE74
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0800BE74
- ldr r0, _0800BDF0 @ =gUnknown_02024A6A
- adds r0, r6, r0
- strh r5, [r0]
- b _0800BE7C
- .align 2, 0
-_0800BDEC: .4byte gEnemyParty
-_0800BDF0: .4byte gUnknown_02024A6A
-_0800BDF4:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0800BE1C
- ldr r0, _0800BE18 @ =gPlayerParty
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0800BE74
- adds r0, r4, 0
- movs r1, 0xB
- b _0800BE30
- .align 2, 0
-_0800BE18: .4byte gPlayerParty
-_0800BE1C:
- ldr r0, _0800BE6C @ =gEnemyParty
- adds r4, r7, r0
- adds r0, r4, 0
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0800BE74
- adds r0, r4, 0
- movs r1, 0x41
-_0800BE30:
- bl GetMonData
- cmp r0, 0
- beq _0800BE74
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- movs r1, 0xCE
- lsls r1, 1
- cmp r0, r1
- beq _0800BE74
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0800BE74
- ldr r1, _0800BE70 @ =gUnknown_02024A6A
- mov r0, r8
- subs r0, 0x2
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r5
- beq _0800BE74
- adds r0, r6, r1
- strh r5, [r0]
- b _0800BE7C
- .align 2, 0
-_0800BE6C: .4byte gEnemyParty
-_0800BE70: .4byte gUnknown_02024A6A
-_0800BE74:
- adds r7, 0x64
- adds r5, 0x1
- cmp r5, 0x5
- ble _0800BD8C
-_0800BE7C:
- mov r8, r10
-_0800BE7E:
- ldr r0, _0800BE98 @ =gUnknown_02024A68
- ldrb r0, [r0]
- cmp r8, r0
- bge _0800BE88
- b _0800BD78
-_0800BE88:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800BE98: .4byte gUnknown_02024A68
- thumb_func_end sub_800BD54
-
- thumb_func_start dp01_prepare_buffer
-dp01_prepare_buffer: @ 800BE9C
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r3, r0, 24
- adds r5, r3, 0
- lsls r2, 16
- lsrs r2, 16
- ldr r0, _0800BEC4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0800BEC8
- adds r0, r3, 0
- adds r1, r2, 0
- adds r2, r4, 0
- bl dp01_prepare_buffer_wireless_probably
- b _0800BF1A
- .align 2, 0
-_0800BEC4: .4byte gBattleTypeFlags
-_0800BEC8:
- cmp r5, 0
- beq _0800BED2
- cmp r5, 0x1
- beq _0800BEFC
- b _0800BF1A
-_0800BED2:
- movs r3, 0
- cmp r3, r2
- bge _0800BF1A
- ldr r6, _0800BEF4 @ =gUnknown_02023A60
- ldr r5, _0800BEF8 @ =gUnknown_02024A60
-_0800BEDC:
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r3, r0
- adds r0, r6
- ldrb r1, [r4]
- strb r1, [r0]
- adds r4, 0x1
- adds r3, 0x1
- cmp r3, r2
- blt _0800BEDC
- b _0800BF1A
- .align 2, 0
-_0800BEF4: .4byte gUnknown_02023A60
-_0800BEF8: .4byte gUnknown_02024A60
-_0800BEFC:
- movs r3, 0
- cmp r3, r2
- bge _0800BF1A
- ldr r6, _0800BF20 @ =gUnknown_02024260
- ldr r5, _0800BF24 @ =gUnknown_02024A60
-_0800BF06:
- ldrb r0, [r5]
- lsls r0, 9
- adds r0, r3, r0
- adds r0, r6
- ldrb r1, [r4]
- strb r1, [r0]
- adds r4, 0x1
- adds r3, 0x1
- cmp r3, r2
- blt _0800BF06
-_0800BF1A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800BF20: .4byte gUnknown_02024260
-_0800BF24: .4byte gUnknown_02024A60
- thumb_func_end dp01_prepare_buffer
-
- thumb_func_start sub_800BF28
-sub_800BF28: @ 800BF28
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _0800BFD0 @ =sub_800C1A8
- movs r1, 0
- bl CreateTask
- ldr r2, _0800BFD4 @ =gUnknown_020238C4
- strb r0, [r2]
- ldr r5, _0800BFD8 @ =gTasks
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r6, 0
- movs r4, 0
- strh r4, [r0, 0x1E]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x20]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x22]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x24]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x26]
- ldr r0, _0800BFDC @ =sub_800C47C
- movs r1, 0
- bl CreateTask
- ldr r2, _0800BFE0 @ =gUnknown_020238C5
- strb r0, [r2]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x20]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x22]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x24]
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r4, [r0, 0x26]
- ldr r0, _0800BFE4 @ =gUnknown_020238C6
- strb r6, [r0]
- mov r0, sp
- strh r4, [r0]
- ldr r1, _0800BFE8 @ =0x02014000
- ldr r2, _0800BFEC @ =0x01001000
- bl CpuSet
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800BFD0: .4byte sub_800C1A8
-_0800BFD4: .4byte gUnknown_020238C4
-_0800BFD8: .4byte gTasks
-_0800BFDC: .4byte sub_800C47C
-_0800BFE0: .4byte gUnknown_020238C5
-_0800BFE4: .4byte gUnknown_020238C6
-_0800BFE8: .4byte 0x02014000
-_0800BFEC: .4byte 0x01001000
- thumb_func_end sub_800BF28
-
- thumb_func_start dp01_prepare_buffer_wireless_probably
-dp01_prepare_buffer_wireless_probably: @ 800BFF0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r10, r2
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- movs r1, 0x3
- mov r0, r8
- bics r0, r1
- adds r0, 0x4
- mov r9, r0
- ldr r2, _0800C168 @ =gTasks
- ldr r3, _0800C16C @ =gUnknown_020238C4
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r4, r0, r2
- movs r1, 0x24
- ldrsh r0, [r4, r1]
- add r0, r9
- adds r0, 0x9
- movs r1, 0x80
- lsls r1, 5
- adds r5, r2, 0
- cmp r0, r1
- ble _0800C042
- ldrh r0, [r4, 0x24]
- movs r2, 0
- strh r0, [r4, 0x20]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r2, [r0, 0x24]
-_0800C042:
- ldr r4, _0800C170 @ =0x02000000
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r2, 0x24
- ldrsh r0, [r0, r2]
- movs r7, 0xA0
- lsls r7, 9
- adds r0, r7
- adds r0, r4
- strb r6, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0x24
- ldrsh r0, [r0, r1]
- ldr r2, _0800C174 @ =0x00014001
- adds r0, r2
- adds r0, r4
- ldr r1, _0800C178 @ =gUnknown_02024A60
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r7, 0x24
- ldrsh r0, [r0, r7]
- ldr r1, _0800C17C @ =0x00014002
- adds r0, r1
- adds r0, r4
- ldr r1, _0800C180 @ =gUnknown_02024C07
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r2, 0x24
- ldrsh r0, [r0, r2]
- ldr r7, _0800C184 @ =0x00014003
- adds r0, r7
- adds r0, r4
- ldr r1, _0800C188 @ =gUnknown_02024C08
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0x24
- ldrsh r0, [r0, r1]
- ldr r2, _0800C18C @ =0x00014004
- adds r0, r2
- adds r0, r4
- mov r7, r9
- strb r7, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r2, 0x24
- ldrsh r1, [r0, r2]
- ldr r7, _0800C190 @ =0x00014005
- adds r1, r7
- adds r1, r4
- movs r0, 0xFF
- lsls r0, 8
- mov r2, r9
- ands r0, r2
- asrs r0, 8
- strb r0, [r1]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r7, 0x24
- ldrsh r0, [r0, r7]
- ldr r1, _0800C194 @ =0x00014006
- adds r0, r1
- adds r0, r4
- ldr r1, _0800C198 @ =gUnknown_02024C0C
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r2, 0x24
- ldrsh r0, [r0, r2]
- ldr r7, _0800C19C @ =0x00014007
- adds r0, r7
- adds r0, r4
- ldr r1, _0800C1A0 @ =gUnknown_02024C0A
- ldrb r1, [r1]
- strb r1, [r0]
- movs r2, 0
- cmp r2, r8
- bge _0800C146
- mov r12, r4
- adds r6, r3, 0
- ldr r4, _0800C1A4 @ =0x00014008
-_0800C122:
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- ldr r1, _0800C168 @ =gTasks
- adds r0, r1
- movs r7, 0x24
- ldrsh r1, [r0, r7]
- adds r0, r2, r4
- adds r1, r0
- add r1, r12
- mov r7, r10
- adds r0, r7, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x1
- cmp r2, r8
- blt _0800C122
-_0800C146:
- ldrb r0, [r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- ldrh r0, [r1, 0x24]
- add r0, r9
- adds r0, 0x8
- strh r0, [r1, 0x24]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800C168: .4byte gTasks
-_0800C16C: .4byte gUnknown_020238C4
-_0800C170: .4byte 0x02000000
-_0800C174: .4byte 0x00014001
-_0800C178: .4byte gUnknown_02024A60
-_0800C17C: .4byte 0x00014002
-_0800C180: .4byte gUnknown_02024C07
-_0800C184: .4byte 0x00014003
-_0800C188: .4byte gUnknown_02024C08
-_0800C18C: .4byte 0x00014004
-_0800C190: .4byte 0x00014005
-_0800C194: .4byte 0x00014006
-_0800C198: .4byte gUnknown_02024C0C
-_0800C19C: .4byte 0x00014007
-_0800C1A0: .4byte gUnknown_02024C0A
-_0800C1A4: .4byte 0x00014008
- thumb_func_end dp01_prepare_buffer_wireless_probably
-
- thumb_func_start sub_800C1A8
-sub_800C1A8: @ 800C1A8
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0800C1D0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r2, 0x1E
- ldrsh r0, [r0, r2]
- adds r7, r1, 0
- cmp r0, 0x5
- bls _0800C1C4
- b _0800C354
-_0800C1C4:
- lsls r0, 2
- ldr r1, _0800C1D4 @ =_0800C1D8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0800C1D0: .4byte gTasks
-_0800C1D4: .4byte _0800C1D8
- .align 2, 0
-_0800C1D8:
- .4byte _0800C1F0
- .4byte _0800C204
- .4byte _0800C220
- .4byte _0800C25C
- .4byte _0800C2E6
- .4byte _0800C338
-_0800C1F0:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r7
- movs r1, 0x64
- strh r1, [r0, 0x1C]
- ldrh r1, [r0, 0x1E]
- adds r1, 0x1
- strh r1, [r0, 0x1E]
- b _0800C354
-_0800C204:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r7
- ldrh r0, [r1, 0x1C]
- subs r0, 0x1
- strh r0, [r1, 0x1C]
- lsls r0, 16
- cmp r0, 0
- beq _0800C21A
- b _0800C354
-_0800C21A:
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- b _0800C352
-_0800C220:
- bl GetLinkPlayerCount_2
- bl IsLinkMaster
- lsls r0, 24
- cmp r0, 0
- beq _0800C248
- bl sub_8007F4C
- ldr r0, _0800C244 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- b _0800C352
- .align 2, 0
-_0800C244: .4byte gTasks
-_0800C248:
- ldr r0, _0800C258 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1E]
- adds r0, 0x1
- b _0800C352
- .align 2, 0
-_0800C258: .4byte gTasks
-_0800C25C:
- lsls r1, r4, 2
- adds r0, r1, r4
- lsls r0, 3
- adds r2, r0, r7
- movs r5, 0x26
- ldrsh r3, [r2, r5]
- movs r0, 0x24
- ldrsh r6, [r2, r0]
- mov r12, r6
- cmp r3, r12
- beq _0800C354
- ldrh r0, [r2, 0x22]
- movs r6, 0x22
- ldrsh r5, [r2, r6]
- cmp r5, 0
- bne _0800C2E0
- cmp r3, r12
- ble _0800C28C
- movs r6, 0x20
- ldrsh r0, [r2, r6]
- cmp r3, r0
- bne _0800C28C
- strh r5, [r2, 0x20]
- strh r5, [r2, 0x26]
-_0800C28C:
- ldr r5, _0800C2D4 @ =0x02000000
- adds r4, r1, r4
- lsls r4, 3
- adds r4, r7
- movs r0, 0x26
- ldrsh r2, [r4, r0]
- ldr r1, _0800C2D8 @ =0x00014004
- adds r0, r2, r1
- adds r0, r5
- ldrb r1, [r0]
- ldr r6, _0800C2DC @ =0x00014005
- adds r2, r6
- adds r2, r5
- ldrb r0, [r2]
- lsls r0, 8
- orrs r1, r0
- adds r1, 0x8
- lsls r1, 16
- lsrs r6, r1, 16
- bl bitmask_all_link_players_but_self
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- movs r2, 0xA0
- lsls r2, 9
- adds r5, r2
- adds r1, r5
- adds r2, r6, 0
- bl SendBlock
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
- b _0800C354
- .align 2, 0
-_0800C2D4: .4byte 0x02000000
-_0800C2D8: .4byte 0x00014004
-_0800C2DC: .4byte 0x00014005
-_0800C2E0:
- subs r0, 0x1
- strh r0, [r2, 0x22]
- b _0800C354
-_0800C2E6:
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- beq _0800C354
- ldr r2, _0800C328 @ =0x02000000
- ldr r0, _0800C32C @ =gTasks
- lsls r3, r4, 2
- adds r3, r4
- lsls r3, 3
- adds r3, r0
- movs r4, 0x26
- ldrsh r1, [r3, r4]
- ldr r5, _0800C330 @ =0x00014004
- adds r0, r1, r5
- adds r0, r2
- ldrb r0, [r0]
- ldr r6, _0800C334 @ =0x00014005
- adds r1, r6
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- movs r2, 0x1
- strh r2, [r3, 0x22]
- orrs r0, r1
- ldrh r1, [r3, 0x26]
- adds r0, r1
- adds r0, 0x8
- strh r0, [r3, 0x26]
- movs r0, 0x3
- strh r0, [r3, 0x1E]
- b _0800C354
- .align 2, 0
-_0800C328: .4byte 0x02000000
-_0800C32C: .4byte gTasks
-_0800C330: .4byte 0x00014004
-_0800C334: .4byte 0x00014005
-_0800C338:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r7
- ldrh r0, [r1, 0x22]
- subs r0, 0x1
- strh r0, [r1, 0x22]
- lsls r0, 16
- cmp r0, 0
- bne _0800C354
- movs r0, 0x1
- strh r0, [r1, 0x22]
- movs r0, 0x3
-_0800C352:
- strh r0, [r1, 0x1E]
-_0800C354:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_800C1A8
-
- thumb_func_start sub_800C35C
-sub_800C35C: @ 800C35C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _0800C38C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _0800C458
- ldr r0, _0800C390 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0800C458
- ldr r0, _0800C394 @ =gLinkPlayers
- ldr r1, [r0, 0x14]
- ldr r0, _0800C398 @ =0x00002211
- cmp r1, r0
- bne _0800C458
- movs r4, 0
- ldr r0, _0800C39C @ =gBlockRecvBuffer
- mov r10, r0
- b _0800C44C
- .align 2, 0
-_0800C38C: .4byte gReceivedRemoteLinkPlayers
-_0800C390: .4byte gBattleTypeFlags
-_0800C394: .4byte gLinkPlayers
-_0800C398: .4byte 0x00002211
-_0800C39C: .4byte gBlockRecvBuffer
-_0800C3A0:
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0800C468 @ =gBitTable
- lsls r1, r4, 2
- adds r1, r2
- ldr r1, [r1]
- ands r0, r1
- adds r1, r4, 0x1
- mov r9, r1
- cmp r0, 0
- beq _0800C446
- adds r0, r4, 0
- bl ResetBlockReceivedFlag
- lsls r0, r4, 8
- mov r2, r10
- adds r3, r0, r2
- ldr r1, _0800C46C @ =gBlockRecvBuffer + 0x4
- adds r0, r1
- ldrh r6, [r0]
- ldr r7, _0800C470 @ =gTasks
- ldr r2, _0800C474 @ =gUnknown_020238C5
- mov r12, r2
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r2, r0, r7
- movs r0, 0x24
- ldrsh r1, [r2, r0]
- adds r0, r6, 0
- adds r0, 0x9
- adds r1, r0
- movs r0, 0x80
- lsls r0, 5
- cmp r1, r0
- ble _0800C402
- ldrh r0, [r2, 0x24]
- strh r0, [r2, 0x20]
- mov r2, r12
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r7
- movs r1, 0
- strh r1, [r0, 0x24]
-_0800C402:
- mov r2, r12
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r7
- movs r2, 0x24
- ldrsh r1, [r0, r2]
- ldr r0, _0800C478 @ =0x02015000
- adds r5, r1, r0
- adds r4, r3, 0
- movs r2, 0
- adds r3, r6, 0
- adds r3, 0x8
- mov r8, r7
- mov r7, r12
- cmp r2, r3
- bge _0800C434
-_0800C426:
- adds r0, r5, r2
- adds r1, r4, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, r3
- blt _0800C426
-_0800C434:
- ldrb r0, [r7]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r8
- ldrh r0, [r1, 0x24]
- adds r0, r6, r0
- adds r0, 0x8
- strh r0, [r1, 0x24]
-_0800C446:
- mov r1, r9
- lsls r0, r1, 24
- lsrs r4, r0, 24
-_0800C44C:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bcc _0800C3A0
-_0800C458:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0800C468: .4byte gBitTable
-_0800C46C: .4byte gBlockRecvBuffer + 0x4
-_0800C470: .4byte gTasks
-_0800C474: .4byte gUnknown_020238C5
-_0800C478: .4byte 0x02015000
- thumb_func_end sub_800C35C
-
thumb_func_start sub_800C47C
sub_800C47C: @ 800C47C
push {r4-r7,lr}
diff --git a/src/rom3.c b/src/rom3.c
index 9bd2674c5..af9a9f4dd 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -7,13 +7,30 @@
#include "species.h"
#include "task.h"
+extern u8 unk_2000000[];
+
+#define EWRAM_14000 ((u8 *)(unk_2000000 + 0x14000))
+#define EWRAM_15000 ((u8 *)(unk_2000000 + 0x15000))
+
extern u16 gBattleTypeFlags;
+extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2];
+extern u32 gBitTable[];
+extern u8 gUnknown_020238C4;
+extern u8 gUnknown_020238C5;
+extern u8 gUnknown_020238C6;
extern u32 gUnknown_020239FC;
+extern u8 gUnknown_02023A60[][0x200];
+extern u8 gUnknown_02024260[][0x200];
+extern u8 gUnknown_02024A60;
extern u32 gUnknown_02024A64;
extern u8 gUnknown_02024A68;
extern u16 gUnknown_02024A6A[];
extern u8 gUnknown_02024A72[];
+extern u8 gUnknown_02024C07;
+extern u8 gUnknown_02024C08;
+extern u8 gUnknown_02024C0A;
+extern u8 gUnknown_02024C0C;
extern u8 gUnknown_02024C78;
extern u8 gUnknown_02024E60[];
extern u8 gUnknown_02024E64[];
@@ -38,10 +55,15 @@ extern void sub_802BF74(void);
extern void sub_8032AE0(void);
extern void sub_8037510(void);
extern void sub_811DA78(void);
+extern void dp01_prepare_buffer_wireless_probably(u8 a, u16, u8 *c);
+extern void sub_800C1A8(u8);
+extern void sub_800C47C(u8);
+extern void sub_8007F4C(void);
+extern u8 sub_8007ECC(void);
void sub_800B858(void)
{
- if (gBattleTypeFlags & 2)
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
OpenLink();
CreateTask(sub_8083C50, 0);
@@ -66,7 +88,7 @@ void setup_poochyena_battle(void)
battle_anim_clear_some_data();
sub_8040710();
BattleAI_HandleItemUseBeforeAISetup();
- if (gBattleTypeFlags & 0x10)
+ if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
ZeroEnemyPartyMons();
CreateMon(&gEnemyParty[0], SPECIES_POOCHYENA, 2, 32, 0, 0, 0, 0);
@@ -81,12 +103,12 @@ void sub_800B950(void)
{
s32 i;
- if (gBattleTypeFlags & 2)
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
sub_800BA78();
else
sub_800B9A8();
sub_800BD54();
- if (!(gBattleTypeFlags & 0x40))
+ if (!(gBattleTypeFlags & BATTLE_TYPE_40))
{
for (i = 0; i < gUnknown_02024A68; i++)
sub_8094978(i, 0);
@@ -95,12 +117,12 @@ void sub_800B950(void)
void sub_800B9A8(void)
{
- if (!(gBattleTypeFlags & 1))
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
gUnknown_030042D4 = sub_8010800;
- if (gBattleTypeFlags & 0x80)
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
gUnknown_03004330[0] = sub_812B468;
- else if (gBattleTypeFlags & 0x200)
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
gUnknown_03004330[0] = sub_8137224;
else
gUnknown_03004330[0] = sub_802BF74;
@@ -255,3 +277,300 @@ void sub_800BA78(void)
}
gUnknown_02024A68 = 4;
}
+
+void sub_800BD54(void)
+{
+ int i;
+ int j;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_40))
+ {
+ for (i = 0; i < gUnknown_02024A68; i++)
+ {
+ for (j = 0; j < 6; j++)
+ {
+ if (i < 2)
+ {
+ if (!(gUnknown_02024A72[i] & 1))
+ {
+ if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != 0
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != 0x19C
+ && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0)
+ {
+ gUnknown_02024A6A[i] = j;
+ break;
+ }
+ }
+ else
+ {
+ if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0x19C
+ && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0)
+ {
+ gUnknown_02024A6A[i] = j;
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (!(gUnknown_02024A72[i] & 1))
+ {
+ if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != 0 //Why is this one not SPECIES2 like the rest?
+ && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != 0x19C
+ && GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) == 0
+ && gUnknown_02024A6A[i - 2] != j)
+ {
+ gUnknown_02024A6A[i] = j;
+ break;
+ }
+ }
+ else
+ {
+ if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0
+ && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != 0x19C
+ && GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) == 0
+ && gUnknown_02024A6A[i - 2] != j)
+ {
+ gUnknown_02024A6A[i] = j;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void dp01_prepare_buffer(u8 a, u8 *b, u16 c)
+{
+ int i;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ dp01_prepare_buffer_wireless_probably(a, c, b);
+ }
+ else
+ {
+ switch (a)
+ {
+ case 0:
+ for (i = 0; i < c; i++)
+ {
+ gUnknown_02023A60[gUnknown_02024A60][i] = *b;
+ b++;
+ }
+ break;
+ case 1:
+ for (i = 0; i < c; i++)
+ {
+ gUnknown_02024260[gUnknown_02024A60][i] = *b;
+ b++;
+ }
+ break;
+ }
+ }
+}
+
+void sub_800BF28(void)
+{
+ gUnknown_020238C4 = CreateTask(sub_800C1A8, 0);
+ gTasks[gUnknown_020238C4].data[11] = 0;
+ gTasks[gUnknown_020238C4].data[12] = 0;
+ gTasks[gUnknown_020238C4].data[13] = 0;
+ gTasks[gUnknown_020238C4].data[14] = 0;
+ gTasks[gUnknown_020238C4].data[15] = 0;
+ gUnknown_020238C5 = CreateTask(sub_800C47C, 0);
+ gTasks[gUnknown_020238C5].data[12] = 0;
+ gTasks[gUnknown_020238C5].data[13] = 0;
+ gTasks[gUnknown_020238C5].data[14] = 0;
+ gTasks[gUnknown_020238C5].data[15] = 0;
+ gUnknown_020238C6 = 0;
+ CpuFill16(0, EWRAM_14000, 0x2000);
+}
+
+void dp01_prepare_buffer_wireless_probably(u8 a, u16 b, u8 *c)
+{
+ s32 r9;
+ int i;
+
+ r9 = b - b % 4 + 4;
+ if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000)
+ {
+ gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14];
+ gTasks[gUnknown_020238C4].data[14] = 0;
+ }
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14000] = a;
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14001] = gUnknown_02024A60;
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14002] = gUnknown_02024C07;
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14003] = gUnknown_02024C08;
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14004] = r9;
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14005] = (r9 & 0x0000FF00) >> 8;
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14006] = gUnknown_02024C0C;
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14007] = gUnknown_02024C0A;
+ for (i = 0; i < b; i++)
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = c[i];
+ gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8;
+}
+
+void sub_800C1A8(u8 taskId)
+{
+ u16 var;
+
+ switch (gTasks[taskId].data[11])
+ {
+ case 0:
+ gTasks[taskId].data[10] = 100;
+ gTasks[taskId].data[11]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10]--;
+ if (gTasks[taskId].data[10] == 0)
+ gTasks[taskId].data[11]++;
+ break;
+ case 2:
+ GetLinkPlayerCount_2();
+ if (IsLinkMaster())
+ {
+ sub_8007F4C();
+ gTasks[taskId].data[11]++;
+ break;
+ }
+ gTasks[taskId].data[11]++;
+ break;
+ case 3:
+ if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
+ {
+ if (gTasks[taskId].data[13] == 0)
+ {
+ if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
+ && gTasks[taskId].data[15] == gTasks[taskId].data[12])
+ {
+ gTasks[taskId].data[12] = 0;
+ gTasks[taskId].data[15] = 0;
+ }
+ var = (unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8)) + 8;
+ SendBlock(bitmask_all_link_players_but_self(), &unk_2000000[gTasks[taskId].data[15] + 0x14000], var);
+ gTasks[taskId].data[11]++;
+ }
+ else
+ {
+ gTasks[taskId].data[13]--;
+ break;
+ }
+ }
+ break;
+ case 4:
+ if (sub_8007ECC())
+ {
+ var = unk_2000000[gTasks[taskId].data[15] + 0x14004] | (unk_2000000[gTasks[taskId].data[15] + 0x14005] << 8);
+ gTasks[taskId].data[13] = 1;
+ gTasks[taskId].data[15] = gTasks[taskId].data[15] + var + 8;
+ gTasks[taskId].data[11] = 3;
+ }
+ break;
+ case 5:
+ gTasks[taskId].data[13]--;
+ if (gTasks[taskId].data[13] == 0)
+ {
+ gTasks[taskId].data[13] = 1;
+ gTasks[taskId].data[11] = 3;
+ }
+ break;
+ }
+}
+
+//fix me
+void sub_800C35C(void)
+{
+ u8 i; //r4
+ s32 j; //r2
+ u16 r6; //r6
+ u8 *recvBuffer; //r3
+ u8 *dest; //r5
+ u8 *src; //r4
+
+ if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & 0x20) && gLinkPlayers[0].linkType == 0x2211)
+ {
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ if (GetBlockReceivedStatus() & gBitTable[i])
+ {
+ ResetBlockReceivedFlag(i);
+ recvBuffer = (u8 *)&gBlockRecvBuffer[i];
+#ifndef NONMATCHING
+ asm("");
+ recvBuffer = (u8 *)&gBlockRecvBuffer[i];
+#endif
+ r6 = gBlockRecvBuffer[i][2];
+ if (gTasks[gUnknown_020238C5].data[14] + 9 + r6 > 0x1000)
+ {
+ gTasks[gUnknown_020238C5].data[12] = gTasks[gUnknown_020238C5].data[14];
+ gTasks[gUnknown_020238C5].data[14] = 0;
+ }
+ //_0800C402
+ dest = EWRAM_15000 + gTasks[gUnknown_020238C5].data[14];
+ src = recvBuffer;
+ for (j = 0; j < r6 + 8; j++)
+ dest[j] = src[j];
+ gTasks[gUnknown_020238C5].data[14] = gTasks[gUnknown_020238C5].data[14] + r6 + 8;
+ }
+ //_0800C446
+ }
+ }
+}
+
+/*
+extern void sub_80155A4();
+
+void sub_800C47C(u8 taskId)
+{
+ //s16 r3;
+ u16 r7;
+ u8 r4;
+ u8 r2;
+
+ if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
+ {
+ if (gTasks[taskId].data[15] > gTasks[taskId].data[14]
+ && gTasks[taskId].data[15] == gTasks[taskId].data[12])
+ {
+ gTasks[taskId].data[12] = 0;
+ gTasks[taskId].data[15] = 0;
+ }
+ //_0800C4B6
+ //r3 = gTasks[taskId].data[15];
+ asm(""::"r"(unk_2000000));
+ r4 = EWRAM_15000[gTasks[taskId].data[15] + 1];
+ r7 = EWRAM_15000[gTasks[taskId].data[15] + 4] | (EWRAM_15000[gTasks[taskId].data[15] + 5] << 8);
+ switch (EWRAM_15000[gTasks[taskId].data[15]])
+ {
+ case 0:
+ if (gUnknown_02024A64 & gBitTable[r4])
+ return;
+ memcpy(gUnknown_02023A60[r4], &EWRAM_15000[gTasks[taskId].data[15] + 8], r7);
+ sub_80155A4(r4);
+ if (!(gBattleTypeFlags & 4))
+ {
+ gUnknown_02024C07 = EWRAM_15000[gTasks[taskId].data[15] + 2];
+ gUnknown_02024C08 = EWRAM_15000[gTasks[taskId].data[15] + 3];
+ gUnknown_02024C0C = EWRAM_15000[gTasks[taskId].data[15] + 6];
+ gUnknown_02024C0A = EWRAM_15000[gTasks[taskId].data[15] + 7];
+ }
+ break;
+ case 1:
+ memcpy(gUnknown_02024260[r4], &EWRAM_15000[gTasks[taskId].data[15] + 8], r7);
+ break;
+ case 2:
+ r2 = EWRAM_15000[gTasks[taskId].data[15] + 8];
+ gUnknown_02024A64 &= ~(gBitTable[r4] << (r2 * 4));
+ break;
+ }
+ gTasks[taskId].data[15] = gTasks[taskId].data[15] + r7 + 8;
+ }
+}
+*/ \ No newline at end of file