diff options
author | camthesaxman <cameronghall@cox.net> | 2017-05-10 16:47:08 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-05-10 16:47:08 -0500 |
commit | e78f49f1efc2eadb674d00c00ffc9a4018b3cdbd (patch) | |
tree | 33f20a7130abba363f8e09d93f0879d78353de2b | |
parent | b2218c7d2ba5a2a2b9ff1258dfb454479241c3b6 (diff) |
decompile some more
-rw-r--r-- | asm/battle_2.s | 701 | ||||
-rw-r--r-- | src/battle_2.c | 321 |
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; + } +} |