diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-01-18 23:43:25 -0600 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-18 21:43:25 -0800 |
commit | 5fae4fddf5c41eba64c96cbd5e7c132f5b6d400f (patch) | |
tree | 4471805a0b1d1720e8b10f03ffeddee5580d045f | |
parent | 56f432fca2d552d8f0cda1a7fbab8aeb7d926fa2 (diff) |
decompile more of rom3 (#199)
* start decompiling rom3
* newline
* decompile sub_800BA78
* decompile more of rom3
* battle type constants
* decompile sub_800C35C
* remove sh.exe.stackdump
-rw-r--r-- | asm/rom3.s | 900 | ||||
-rw-r--r-- | src/rom3.c | 333 |
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 |